11.Query an Array of Embedded Documents-官方文档摘录
总结
1.插入数据
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
2.查找嵌套在数组中的文档
db.inventory.find({"instock":{"warehouse":"A","qty":5}})
3.根据数组索引查找内嵌文档元素
db.inventory.find({"instock.0.qty":{$lte:20}})
如果不是精确到具体的索引元素,则只要里面满足即可展现
db.inventory.find({"instock.qty":{$lte:20}})
4.使用elemMatch来查找符合数组元素的条件
db.inventory.find({"instock":{$elemMatch:{qty:5,warehouse:"A"}}})
5.使用elemMatch查找范围
db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )
This page provides examples of query operations on an array of nested documents using thedb.collection.find()
method in the mongo
shell. The examples on this page use the inventory
collection. To populate the inventory
collection, run the following:
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
You can run the operation in the web shell below:
Query for a Document Nested in an Array
The following examples selects all documents where an element in the instock
array matches the specified document:
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
Equality matches on the whole embedded/nested document require an exact match of the specified document, including the field order. For example, the following query does not match any documents in theinventory
collection:
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )
Specify a Query Condition on a Field in an Array of Documents
Use the Array Index to Query for a Field in the Embedded Document
Using the dot notation, you can specify query conditions for field in a document at a particular index or position of the array. The array uses zero-based indexing.
The following example selects all documents where the instock
array has as its first element a document that contains the field qty
whose value is less than or equal to 20
:
db.inventory.find( { 'instock.0.qty': { $lte: 20 } } )
Specify a Query Condition on a Field Embedded in an Array of Documents
If you do not know the index position of the document nested in the array, concatenate the name of the array field, with a dot (.
) and the name of the field in the nested document.
The following example selects all documents where the instock
array has at least one embedded document that contains the field qty
whose value is less than or equal to 20
:
db.inventory.find( { 'instock.qty': { $lte: 20 } } )
Specify Multiple Conditions for Array of Documents
When specifying conditions on more than one field nested in an array of documents, you can specify the query such that either a single document meets these condition or any combination of documents (including a single document) in the array meets the conditions.
A Single Nested Document Meets Multiple Query Conditions on Nested Fields
Use $elemMatch
operator to specify multiple criteria on an array of embedded documents such that at least one embedded document satisfies all the specified criteria.
The following example queries for documents where the instock
array has at least one embedded document that contains both the field qty
equal to 5
and the field warehouse
equal to A
:
db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
The following example queries for documents where the instock
array has at least one embedded document that contains the field qty
that is greater than 10
and less than or equal to 20
:
db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )
Combination of Elements Satisfies the Criteria
If the compound query conditions on an array field do not use the $elemMatch
operator, the query selects those documents whose array contains any combination of elements that satisfies the conditions.
For example, the following query matches documents where any document nested in the instock
array has the qty
field greater than 10
and any document (but not necessarily the same embedded document) in the array has the qty
field less than or equal to 20
:
db.inventory.find( { "instock.qty": { $gt: 10, $lte: 20 } } )
The following example queries for documents where the instock
array has at least one embedded document that contains the field qty
equal to 5
and at least one embedded document (but not necessarily the same embedded document) that contains the field warehouse
equal to A
:
db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )
Additional Query Tutorials
For additional query examples, see:
11.Query an Array of Embedded Documents-官方文档摘录的更多相关文章
- 9.Query on Embedded/Nested Documents-官方文档摘录
1.插入案例 db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: & ...
- Cocos Creator 加载和切换场景(官方文档摘录)
Cocos Creator 加载和切换场景(官方文档摘录) 在 Cocos Creator 中,我们使用场景文件名( 可以不包含扩展名)来索引指代场景.并通过以下接口进行加载和切换操作: cc.dir ...
- ng的概念层次(官方文档摘录)
官方文档是这么说的: You write Angular applications by: composing HTML templates with Angularized markup, writ ...
- Cocos Creator 生命周期回调(官方文档摘录)
Cocos Creator 为组件脚本提供了生命周期的回调函数.用户通过定义特定的函数回调在特定的时期编写相关 脚本.目前提供给用户的声明周期回调函数有: onLoad start update la ...
- Cocos Creator 使用计时器(官方文档摘录)
在 Cocos Creator 中,我们为组件提供了方便的计时器,这个计时器源自于 Cocos2d-x 中的 cc.Scheduler,我们将它保留在了 Cocos Creator 中并适配了基于组件 ...
- angular 模板语法(官方文档摘录)
https://angular.cn/guide/template-syntax {{}} 和"" 如果嵌套,{{}}里面求完值,""就是原意 <h3&g ...
- 8.Query Documents-官方文档摘录
总结 1 先插入数据 db.inventory.insertMany([ { item: "journal", qty: 25, size: { h: 14, w: 21, uom ...
- 10.Query an Array-官方文档摘录
1.插入 db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", " ...
- Gora官方文档之二:Gora对Map-Reduce的支持 分类: C_OHTERS 2015-01-31 11:27 232人阅读 评论(0) 收藏
参考官方文档:http://gora.apache.org/current/tutorial.html 项目代码见:https://code.csdn.net/jediael_lu/mygoradem ...
随机推荐
- 关于http ,那些你必须知道的事
一,HTTP简介 1,HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览 ...
- JVM-String常量池与运行时常量池
Start with JVM 周志明先生著-<深入理解Java虚拟机>,书买回来好几天了,但是最近才准备开始搞一搞了(哭瞎…..).首先是第一章的Java以及JVM发展历史,大概知道了现行 ...
- 关于mysql内存表的一个帖子(转载)
地址:http://bbs.csdn.net/topics/360030699 引用楼主 zgycsmb 的回复:问:1mysql的内存表性能怎么样2mysql的内存表与system v 这种共享内存 ...
- ITDB系统搭建及实时备份
ITDB系统搭建及实时备份 ITDB简介 ITDB一款来自希腊的开源IT资产管理系统,它是基于Web的IT资产信息管理系统.对于那些IT设备较多而又缺少管理IT资产信息工具的公司,ITDB是一个不错的 ...
- javaweb 压缩文件图片
压缩图片分辨率 ,根据 url 和 根据 file /** * <p>Title: thumbnailImage</p> * <p>Description: 根据 ...
- PHP学习笔记(6)js点击刷新验证码
用“换一张”来控制验证码刷新,js脚本怎么写 宏朋雄 | 浏览 3663 次 2012-06-11 22:41 2012-06-12 01:49 最佳答案 <img src=“验证码文 ...
- centos 7安装完后出现please make your choice from '1' to e
解决方法:输入“1”,按Enter键输入“2”,按Enter键输入“q",按Enter键输入“yes”,按Enter键
- Shell面试题4:扫描网络内存活主机案例
19.1.4企业Shell面试题4:扫描网络内存活主机案例 写一个Shell脚本,判断10.0.0.0/24网络里,当前在线的IP有哪些? [root@st153 tools]# cat check_ ...
- 常见tcp端口说明
TCP端口(静态端口)TCP 0= ReservedTCP 1=TCP Port Service MultiplexerTCP 2=DeathTCP 5=Remote Job Entry,yoyoTC ...
- 【vijos】1790 拓扑编号(拓扑+贪心)
https://vijos.org/p/1790 好神的贪心题.. 一开始我也想到了贪心,但是是错的..sad 就是因为每一个节点的编号与逆图的子树有关,且编号一定是>=子树的儿子+1的.但是想 ...