80

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

[512d5793abb900bf3e20d012, 512d5793abb900bf3e20d011]

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

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

4

4 回答 4

131

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

var ids = ['512d5793abb900bf3e20d012', '512d5793abb900bf3e20d011'];
var obj_ids = ids.map(function(id) { return ObjectId(id); });
db.test.find({_id: {$in: obj_ids}});
于 2013-02-27T04:44:50.083 回答
4

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

db.getCollection('my_collection').find({'_id':{$in:['aa37ba96']}})
于 2020-08-16T20:12:56.307 回答
1

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

var ids= req.body.categoryId.split(','); 

db.test.find({ categoryId: { $in: ids } });
于 2019-03-12T12:51:27.607 回答
0

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

于 2013-02-27T03:14:48.277 回答