MongoDBは_idの配列のどこを選択しますか?


90

mongo dbでは、SQLのようにコレクションのドキュメントを選択できます。

SELECT * FROM collection WHERE _id IN (1,2,3,4);

または、私が持っている場合、_id array私は1つずつ選択してarray/objectから結果を再構成する必要がありますか?

回答:


165

簡単:)

db.collection.find( { _id : { $in : [1,2,3,4] } } );

取得元:http//www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in


インデックス作成のメリットはまだありますか?その場合のIDが...プレーン文字列として渡される
ラファウPastuszakを

2
あなたがやる。ただし、時間計算量は線形(n)であり、対数/定数ではありません。インデックスがないと、n ^ 2になります。
Petr Brazdil 2014

そうでないO(log(n) * m)ところnのコレクションのサイズであり、mIDの数が渡されたのですか?
Guig 2016年

8
"_id"がIDオブジェクトの場合、ObjectId関数を使用する必要があります— {_id:{$ in:[ObjectId( "5a633609670aeb6f93b88b23")]}}
Pax Beach

5

リストはIDの配列です

このコードリストには、ユーザーコレクション内のIDの配列があります

var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"]

    .find({ _id: {$in : list}})

4
コードが機能していません。IDをObjectId( "5883d387971bb840b7399130")として設定する必要があるようです
Pax Beach

0

mongodbはbsonを使用するためbson、重要な属性タイプです。そして、あなたはこのように使わなければならないから_idですObjectId

db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );

そしてmongodb compassこのように使用中:

{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }

注:文字列のobjectIdには24長さがあります。


-4

これはmongoクエリとは関係ありません。私はSQLに精通しており、Studio3TIDEを使用してSQLを使用してmongoデータベースにクエリを実行しました。あなたが私のような人なら、id値をタイプキャストする必要があることを指摘したいと思います。したがって、クエリは次のようになります。

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");

2
これは問題にまったく対処していません。
loctrice

答えない、同意した。これは、SQLを使用してmongoDBと対話できるStudio3TなどのIDEで役立つ場合があります。そこに答えがあります。また、その場合でも、_idはタイプキャストする必要があることを強調しておきます。
sourabhxiii

1
その程度のMongoDB
のRohit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.