【问题标题】:Mongo, find through list of idsMongo,通过 id 列表查找
【发布时间】:2020-08-17 04:12:56
【问题描述】:

我有一个返回字符串 MongoDB id 列表的进程,

[512d5793abb900bf3e20d012, 512d5793abb900bf3e20d011]

我想向 Mongo 发起一个查询,并以与列表相同的顺序获取匹配的文档。

执行此操作的 shell 符号是什么?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    将字符串转换为 ObjectIds 后,您可以使用 $in 运算符获取列表中的文档。没有任何查询符号可以让文档按您的列表顺序返回,但请参阅 here 了解一些处理方法。

    var ids = ['512d5793abb900bf3e20d012', '512d5793abb900bf3e20d011'];
    var obj_ids = ids.map(function(id) { return ObjectId(id); });
    db.test.find({_id: {$in: obj_ids}});
    

    【讨论】:

    • 这工作得很好,但我有另一个查询,我只想要一个 ID 列表记录我应该怎么做?
    • 我如何从这个数组中获取 id:{ "_id" : ObjectId("611b96a6699005a8f561fe52") }, { "_id" : ObjectId("611b96a2699005a8f561fe51") }
    【解决方案2】:

    这对我来说在 Robo 3T 中效果很好。无需创建任何对象,只需使用 id 列表即可。

    db.getCollection('my_collection').find({'_id':{$in:['aa37ba96']}})
    

    【讨论】:

      【解决方案3】:

      //请求中的categoryId逗号分隔“5c875c27d131b755d7abed86,5c875b0ad131b755d7abed81”

      var ids= req.body.categoryId.split(','); 
      
      db.test.find({ categoryId: { $in: ids } });
      

      【讨论】:

      • 不回答问题。该问题清楚地显示了 array 而不是字符串。如果您要在不同注释上添加其他内容,您可以使用asked a new question 并发布您自己的回复。无需为现有问题添加不相关的答案。
      【解决方案4】:

      如果您的最终目的是通过预先获取的 ids 列表按顺序获取文档,则只需将查询结果转换为 mapping(id as key, doc as value) ,然后遍历 ids 列表即可文档。

      【讨论】:

      • 我正在查询将返回结果的查询...?代码示例将不胜感激。
      猜你喜欢
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2014-03-09
      • 1970-01-01
      • 2020-08-10
      • 2017-05-10
      • 2013-06-18
      相关资源
      最近更新 更多