MongoDB auswählen wo in Array von _id?

88

In Mongo DB ist es möglich, die Dokumente der Sammlung wie in SQL auszuwählen:

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

oder wenn ich ein habe, _id arraymuss ich eins nach dem anderen auswählen und dann die array/objectErgebnisse neu zusammenstellen?

da ich bin
quelle

Antworten:

160

Einfach :)

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

entnommen aus: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in

Programmierbuch
quelle
Erhalten wir immer noch Vorteile der Indizierung? IDs werden in diesem Fall als einfache Zeichenfolgen übergeben ...
Rafal Pastuszak
1
Sie machen. Die zeitliche Komplexität ist jedoch linear (n) und nicht logarithmisch / konstant. Ohne Index wäre es n ^ 2.
Petr Brazdil
Ist es nicht O(log(n) * m)wo nist die Größe der Sammlung und mist die Anzahl der übergebenen IDs?
Guig
7
Sie müssen die ObjectId-Funktion verwenden, wenn "_id" das ID-Objekt ist - {_id: {$ in: [ObjectId ("5a633609670aeb6f93b88b23")]}}
Pax Beach
5

list ist ein Array von IDs

In dieser Codeliste befindet sich das Array der IDs in der Benutzersammlung

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

    .find({ _id: {$in : list}})
KARTHIKEYAN.A
quelle
4
Der Code funktioniert nicht. Es scheint, IDs als ObjectId ("5883d387971bb840b7399130") setzen zu müssen
Pax Beach
0

Weil Mongodb bsonund für Bson wichtige Attributtypen verwendet. und weil _idist ObjectId, müssen Sie wie folgt verwenden:

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

und in mongodb compassGebrauch wie folgt:

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

Hinweis: Die Objekt-ID in der Zeichenfolge hat die 24Länge.

ttrasn
quelle
-4

Dies hängt nicht mit der Mongo-Abfrage zusammen. Ich war mit SQL vertraut und habe mit Studio3T IDE eine Mongo-Datenbank mit SQL abgefragt. Wenn Sie einer wie ich sind, möchte ich darauf hinweisen, dass der ID-Wert typisiert werden muss. Die Abfrage sieht also folgendermaßen aus:

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");
Sourabhxiii
quelle
2
Dies geht überhaupt nicht auf die Frage ein.
Loctrice
Antwortet nicht, stimmte zu. Es kann bei einigen IDE wie Studio3T hilfreich sein, mit denen Sie mit mongoDB über SQL interagieren können. Dort hat die Antwort Anwendung. Es ist auch hervorzuheben, dass auch in diesem Fall die _id typisiert werden muss.
Sourabhxiii
1
Es geht um Mongodb
Rohit