【问题标题】:How to get multiple document using array of MongoDb id?如何使用 MongoDb id 数组获取多个文档?
【发布时间】:2015-08-28 05:56:26
【问题描述】:

我有一个 id 数组,我想一次获取它们的所有文档。为此,我正在写,但它返回 0 条记录。

如何使用多个 ID 进行搜索?

db.getCollection('feed').find({"_id" : { "$in" : [  
"55880c251df42d0466919268","55bf528e69b70ae79be35006" ]}})

我可以通过像

这样传递单个 id 来获取记录
db.getCollection('feed').find({"_id":ObjectId("55880c251df42d0466919268")})

【问题讨论】:

  • 您可能需要像在第二个示例中那样将 id 包装在 ObjectId() 中。
  • db.getCollection('feed').find({"_id" : { "$in" : [ ObjectId("55880c251df42d0466919268"),ObjectId("55bf528e69b70ae79be35006") ]}}) 可能有效。
  • 谢谢...它正在工作
  • Pankaj,也许你没有注意到,但在他的评论之上,@kxxoling 发布了一个答案。将答案标记为“已接受”总是好的,因为它可以帮助遇到同样问题的人。他们会看到绿色勾号,并更有信心这是一个可行的解决方案。它还为 kxxoling 提供了几点;-)
  • 我们如何在 node 中的 ObjectId 中包装单个 id?

标签: mongodb


【解决方案1】:

MongoDB 是类型敏感的,这意味着 1'1' 不同,"55880c251df42d0466919268"ObjectId("55880c251df42d0466919268") 也是如此。后者是ObjectID类型而不是str类型,也是MongoDB文档默认的_id类型。

您可以找到有关 ObjectID here 的更多信息。

试试吧:

db.getCollection('feed').find({"_id" : {"$in" : [ObjectId("55880c251df42d0466919268"), ObjectId("55bf528e69b70ae79be35006")]}});

【讨论】:

    【解决方案2】:

    我相信你错过了ObjectId。试试这个:

    db.feed.find({ 
        _id: {
            $in: [ObjectId("55880c251df42d0466919268"), ObjectId("55bf528e69b70ae79be35006")]
        }
    });
    

    【讨论】:

      【解决方案3】:

      要查找多个文档的记录,您必须使用“$in”运算符 虽然您的查询很好,但您只需要在查找 Id 数据时添加 ObjectId

      db.feed.find({
        "_id" : {
          "$in" : 
            [ObjectId("55880c251df42d0466919268"), 
             ObjectId("55bf528e69b70ae79be35006")
            ]
         }
      });
      

      【讨论】:

      • 嗨 Vikas - 您的答案似乎与 kxxoling 和 Vimalraj Selvam 的两个现有答案大致相同,这两个答案都已经强调 ObjectId 部分是必不可少的。你有什么额外的贡献吗?
      • @VinceBowdren 他提供了更具可读性的解决方案:)
      【解决方案4】:

      只是我用过它,并且工作正常:

      module.exports.obtenerIncidencias386RangoDias = function (empresas, callback) {
          let arraySuc_Ids = empresas.map((empresa)=>empresa.sucursal_id)
                  incidenciasModel.find({'sucursal_id':{$in:arraySuc_Ids}
                  }).sort({created_at: 'desc'}).then(
                      (resp)=>    {
                          callback(resp)}
                  )
      };
      

      在哪里:

      empresas = ["5ccc642f9e789820146e9cb0","5ccc642f9e789820146e9bb9"]

      【讨论】:

        【解决方案5】:

        将数组列表存储在 var 中并将该数组列表传递给 find 函数 var list=db.collection_name.find() db.collection_name.find({_id:{$in:list}})

        【讨论】:

          【解决方案6】:

          ID 需要采用这种格式:ObjectId("id")
          您可以使用它来转换您的字符串 ID:

          const ObjectId = require('mongodb').ObjectId;
          

          【讨论】:

            【解决方案7】:
            db.getCollection({your_collection_name}).find({
                "_id" : {
                "$in" : 
                  [({value1}), 
                   ({value2})
                  ]
               } 
                })
            

            【讨论】:

              猜你喜欢
              • 2020-05-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-10-04
              • 1970-01-01
              • 1970-01-01
              • 2021-06-26
              • 1970-01-01
              相关资源
              最近更新 更多