MongoDB查询数组
转载请出自出处:http://eksliang.iteye.com/blog/2177292
一、概述
MongoDB查询数组与查询标量值是一样的,例如,有一个水果列表,如下所示:
> db.food.find() { "_id" : "001", "fruits" : [ "苹果", "香蕉", "橘子" ] } { "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] } { "_id" : "003", "fruits" : [ "圣女果", "梨子", "橘子", "桃子" ] }
现在我要查询含有苹果的食品,实例如下:
> db.food.find({"fruits":"苹果"}) { "_id" : "001", "fruits" : [ "苹果", "香蕉", "橘子" ] } { "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] }
MongoDB查询数组时,查询条件会与每个元素进行比较,如果匹配上了,就算符合条件
二、"$all"操作符
如果需要通过多个元素来匹配数组,就要用"$all"了。
还是下面这个水果列表:
> db.food.find() { "_id" : "001", "fruits" : [ "苹果", "香蕉", "橘子" ] } { "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] } { "_id" : "003", "fruits" : [ "圣女果", "梨子", "橘子", "桃子" ] }
参考实例一:查询水果列表中既有苹果又有桃子的食品
> db.food.find({"fruits":{"$all":["苹果","桃子"]}}) --这是AND的关系 { "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] }
这里的顺序没有任何关系。
数组都是可以通过下标访问的,MongoDB也不例外;
参考实例二:查询水果列表中下标为1的元素是梨子的食品
> db.food.find({"fruits.1":"梨子"}) { "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] } { "_id" : "003", "fruits" : [ "圣女果", "梨子", "橘子", "桃子" ] }
三、"$size"操作符
这个"$size"非常有用,顾名思义就是查询特定长度的数组。
参考实例一:查询food集合中frutis数组包含3个元素的文档
> db.food.find({"fruits":{"$size":3}}) { "_id" : "001", "fruits" : [ "苹果", "香蕉", "橘子" ] }
查询一定长度范围内的文档时一种常见查询。"$size"并不能与其他查询条件(比如"$gt")组合使用;遇到这种业务怎么办?
答:遇到这种情况可以再文档中加一个size的键,每次往指定数组中添加一个元素就把size这个键的值加1;
参考实例如下:
原本更新语句如下:
db.food.update({"_id":"004"},{"$push":{"fruits":"苹果"}})
现在需要变成如下:
db.food.update({"_id":"004"},{"$push":{"fruits":"苹果"},"$inc":{"size":1}})
"$inc"自增长的速度非常快,对性能影响几乎微乎其微,这样建模以后就可以如下这么查询了
db.food.find({"size":{"$gt":3}}) --查询数组长度大于3的文档
温馨提示:这种技巧并不能与"$addToSet"(如果数组中已经存在该元素就不添加)操作符一起使用。
三、"$slice"操作符
find方法的第二个参数是可选的,可以指定需要返回的列,"$slice"操作符用来返回某个键匹配数组元素的一个子集
例如下面有这样一个文档
db.test.insert({"_id":"t001","lists":["aa","bb","cc","ee","ff","gg"]})
参考实例一:返回lists前3个元素
> db.test.find({},{"lists":{"$slice":3}}) { "_id" : "t001", "lists" : [ "aa", "bb", "cc" ] }
参考实例二:返回lists后3个元素
> db.test.find({},{"lists":{"$slice":-3}}) { "_id" : "t001", "lists" : [ "ee", "ff", "gg" ] }
参考实例三:从linsts中第2个元素开始,返回3个元素
> db.test.find({},{"lists":{"$slice":[2,3]}}) { "_id" : "t001", "lists" : [ "cc", "ee", "ff" ] }
相关推荐
MongoDB 是一款流行的开源...文档内可以嵌套字段、数组和子文档,这种灵活性使得MongoDB特别适合处理复杂和动态的数据结构。使用MongoDB,开发者能够快速构建和扩展应用程序,同时享受到其强大的查询能力和高效的性能。
MongoDB 是一种流行的开源、非关系型数据库系统,属于NoSQL数据库家族,以其高效、灵活的数据存储能力而受到广泛欢迎。本课程“10天掌握MongoDB”旨在帮助学习者快速上手MongoDB的基本操作,包括增删改查等核心功能...
MongoDB提供了强大的查询语言——MQL(MongoDB Query Language),支持丰富的查询表达式和聚合框架。你可以根据字段、条件进行查询,并使用正则表达式、数组过滤等高级特性。 在性能方面,MongoDB支持索引,可以...
MongoDB还提供了一个交互式的后台管理工具——MongoDB Shell,它是一个基于JavaScript的命令行界面,允许用户直接与数据库进行交互,进行数据的插入、查询、更新和删除等操作。在MongoDB Shell中,用户可以直接运行...
MongoDB 还有一个重要的组件——GridFS,用于存储大型文件。GridFS 将大文件拆分为多个小文件(Chunks),存储在 MongoDB 的集合中。这样可以方便地进行文件的存取和备份。 MongoDB 使用 BSON(Binary JSON)格式...
3. 支持动态查询,查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。 4. 支持完全索引,包含内部对象。 5. 支持复制和故障恢复,提供了主——从、主——主模式的数据复制及服务器之间的数据复制...
MongoDB使用了类似于JSON的对象表示形式——BSON(Binary JSON)来存储数据,这种格式使得数据的存储更加高效且易于处理。 **BSON格式示例**: ```json {"username":"jack","age":20,"sex":"男"} ``` 这里的数据由...
标题“MongoDB Document”直接指向了MongoDB的核心概念之一——文档。 #### 描述:MongoDB Develop Document **描述**部分提到的是“MongoDB开发文档”,这表明文档主要面向开发者群体,旨在为他们提供深入理解...
在本文中,我们将深入探讨如何在 Laravel 框架中集成 MongoDB 数据库,以及使用“Laravel-MongoDB”扩展包——Eloquent ORM(对象关系映射)的“MongoDB”版本,通常被称为“Jenssegers/Laravel-MongoDB”。...
你也会(7篇)——第一篇 快速入门 MongoDB(8)8天学通MongoDB——第八天 驱动实践 8天学通MongoDB——第七天 运维技术 8天学通MongoDB——第六天 分片技术 8天学通MongoDB——第五天 主从复制 8天学通MongoDB——第四...
它以其灵活的数据模型、丰富的查询语言以及对大规模数据处理的能力而备受赞誉。JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,因此在Web服务...
2、需要事先熟悉《mongodb基础命令——进阶篇》的内容 3、其中更新数据部分只给出了一个$set的例子,但是跟操作命令是一样的,注意理解与尝试 4、在最下来有对函数进行简单的介绍,其中的一些内容会在本人学习完后续...
4. **查询构建器**:对于更复杂的查询需求,adminMongo提供了一个查询构建器,允许你构建和执行各种MongoDB查询语句。 5. **数据导入/导出**:你可以将数据导出为JSON或CSV格式,也可以从这些文件导入数据,方便...
这两个字段虽然内容完全相同,但是指代的是同一本书——《MongoDB: The Definitive Guide》。这是一本详细介绍MongoDB数据库系统的权威指南。 #### 标签解析 - **标签**: "MongoDB.The.Definitive.Guide" 这个标签...
除了这些简单的聚合函数外,MongoDB还提供了一个更强大的聚合框架——`aggregate`方法,它允许用户通过一系列的阶段(pipeline stages)进行数据处理,如`$match`、`$group`、`$sort`、`$project`等,实现更复杂的...
2. **数据存储**:抓取的网页内容需要存储起来以便后续处理。PHP可以与各种数据库系统交互,如MySQL、PostgreSQL、SQLite等,用于存储和检索网页内容。此外,也可以使用NoSQL数据库如MongoDB,适合大规模非结构化...
为了使PHP能够操作MongoDB,需要安装MongoDB的PHP扩展——MongoDB PHP驱动程序。这个驱动程序支持MongoDB的各种功能,包括但不限于数据的插入、查询、更新和删除等操作。 实例分析中,首先介绍了创建MongoDB连接的...