如果我有以下负载:
{
"objs": [
{ "_id": "1234566", "some":"data", "key": "one" },
{ "_id": "1234576", "some":"data", "key": "one" },
{ "_id": "2345666", "some":"otherdata", "key": "two" },
{ "_id": "4566666", "some":"yetotherdata", "key": "three" },
]
}
如何使用以下内容返回所有对象 (objs):
key: "one"
_id: [1234566, 1234576]
谢谢
最佳答案
find()
查询返回所有包含满足这两个条件的子文档的 objs
。
var input = ["1234566","1234576"];
db.collection.find({$and:[{"objs._id":{$in:input}},{"objs.key":"one"}]})
如果您想获取 objs
数组中的编辑文档,您可以使用聚合管道操作来实现。
- 定义一个变量来保存输入值。
$unwind
byobjs
元素,这为您提供了每个单独的文档 objs 数组中的元素。$match
仅匹配选择条件的文档。$group
by"_id"
由mongo
自动生成的文档。$project
必填字段。
代码:
var input = ["1234566","1234576"];
db.collection.aggregate([
{$unwind:"$objs"},
{$match:{"objs._id":{$in:input},"objs.key":"one"}},
{$group:{"_id":"_id","objs":{$push:"$objs"}}},
{$project:{"_id":0,"objs":1}}
])
对/对:
{ "objs" :
[ { "_id" : "1234566", "some" : "data", "key" : "one" },
{ "_id" : "1234576", "some" : "data", "key" : "one" } ] }
关于mongodb - 查询以检索数组中的多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27051894/