mongodb - 查询以检索数组中的多个项目

标签 mongodb

如果我有以下负载:

{
    "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 by objs 元素,这为您提供了每个单独的文档 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/

相关文章:

mongodb - meteor 合集 : find element in array

mongodb - Pentaho MongoDB 报告查询日期范围

node.js - 如何使用mongodb聚合以下数据

node.js - 寻找 Mongoose 更新一的最佳方法

mongodb - 如何将带有 awaitdata 的可尾游标移动到末尾,以便我只获得新的更新

mongodb - EclipseLink MongoDB @ManyToOne classCastException 非常简单的示例

c# - 如何测试 MongoDB 文档中的字符串字段不为空?

mongodb - 如何在 mongo-go-driver 中使用 “Let” 聚合选项?

MongoDb 从文档中删除子文档

python - 在继续之前如何/最好的方式等待 Mongod 实例启动