文字列MongoDBIDのリストを返すプロセスがあります。
[512d5793abb900bf3e20d012, 512d5793abb900bf3e20d011]
そして、Mongoに対して単一のクエリを実行し、一致するドキュメントをリストと同じ順序で取得したいと思います。
これを行うためのシェル表記は何ですか?
文字列MongoDBIDのリストを返すプロセスがあります。
[512d5793abb900bf3e20d012, 512d5793abb900bf3e20d011]
そして、Mongoに対して単一のクエリを実行し、一致するドキュメントをリストと同じ順序で取得したいと思います。
これを行うためのシェル表記は何ですか?
文字列をObjectIdsに変換した後、$in
演算子を使用してリスト内のドキュメントを取得できます。ドキュメントをリストの順序に戻すためのクエリ表記はありませんが、それを処理するいくつかの方法については、ここを参照してください。
var ids = ['512d5793abb900bf3e20d012', '512d5793abb900bf3e20d011'];
var obj_ids = ids.map(function(id) { return ObjectId(id); });
db.test.find({_id: {$in: obj_ids}});
これは、Robo3Tでは問題なく機能します。オブジェクトを作成する必要はなく、IDのリストを使用するだけです。
db.getCollection('my_collection').find({'_id':{$in:['aa37ba96']}})
//リクエストでcategoryIdコンマ区切り「5c875c27d131b755d7abed86,5c875b0ad131b755d7abed81」
var ids= req.body.categoryId.split(',');
db.test.find({ categoryId: { $in: ids } });
最終的な目的がpre-getidsリストによる順序でドキュメントを取得することである場合は、クエリ結果をmapping(id as key、doc as value)に変換し、idsリストをトラバースしてドキュメントを取得できます。