mongodb 对象数组查询
本文总结了如何在 mongoDB 中对对象数组(数组中包含的元素类型是对象)进行查询。
集合数据
假设有如下文档,集合名为 ventory
。
1 | db.collection('inventory').insertMany([ |
在集合中精确匹配一个完整的嵌套文档
1 | // 仅当 instock 中有元素为 { warehouse: 'A', qty: 5 } 时才返回 |
该查询同匹配数组中的某个基本元素一样的原理。
对数组中文档的某个字段按条件匹配
按数组中对象的某个字段匹配
1 | // 只要数组中有一个元素的 qty 满足条件就返回值 |
按数组中特定位置对象的某个字段匹配
数组中元素的索引从 0 开始。
1 | // 当 instock 数组中第 1 个元素的 qty 满足条件时返回 |
对数组中的文档进行多条件匹配
数组中多个元素共同满足一组条件
下列查询中,当满足以下情况之一时,会有返回值:
instock
中的一个元素有字段qty
且满足$gt: 15
,另一个元素也有字段qty
且满足$lte: 20
instock
中的一个元素有字段qty
且同时满足匹配条件
1 | db.collection('inventory').find({ |
下列查询中,当满足以下情况之一时,会有返回值:
instock
中的一个元素有字段qty
且值为5
,另一个元素有字段warehouse
且值为A
instock
中的一个元素有字段qty
且值为5
,该元素同时有字段warehouse
且值为A
1 | db.collection('inventory').find({ |
这种匹配机制概括为:
只要条件被数组中的元素共同满足后,就会返回。就像工作中分配任务一样,只要任务被完成,具体的完成人有几个可以不用关心。
数组中任一个元素同时满足一组条件
1 | db.collection('inventory').find({ |