MongoDB seleziona dove nell'array di _id?


90

è possibile in mongo db selezionare i documenti della raccolta come in SQL:

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

o se ne ho uno _id arraydevo selezionarne uno per uno e poi ricomporre i array/objectrisultati?

Risposte:


165

Facile :)

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

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


Otteniamo ancora vantaggi dall'indicizzazione? Gli ID in questo caso vengono passati come semplici stringhe ...
Rafal Pastuszak

2
Tu fai. Tuttavia la complessità temporale è lineare (n), non logaritmica / costante. Senza indice sarebbe n ^ 2.
Petr Brazdil

Non O(log(n) * m)dov'è nla dimensione della raccolta e mil numero di ID passati?
Guig

8
Devi usare la funzione ObjectId, se "_id" è l'ID oggetto - {_id: {$ in: [ObjectId ("5a633609670aeb6f93b88b23")]}}
Pax Beach

5

list è un array di ID

In questo elenco di codici c'è l'array di ID nella raccolta utenti

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

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

4
Il codice non funziona. Sembra dover impostare ID come ObjectId ("5883d387971bb840b7399130")
Pax Beach

0

Perché mongodb utilizza bsone per bson è tipi di attributi importanti. e poiché _idè ObjectIdsi deve utilizzare in questo modo:

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

e in mongodb compassuso in questo modo:

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

Nota: objectId nella stringa ha 24lunghezza.


-4

Questo non è correlato alla query mongo. Conoscevo SQL e utilizzavo l'IDE di Studio3T per interrogare un database mongo usando SQL. Se sei uno come me, voglio sottolineare che il valore id deve essere typecast. Quindi la query sarà simile a:

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

2
Questo non risolve affatto la domanda.
loctrice

Non risponde, d'accordo. Può essere d'aiuto con alcuni IDE come Studio3T, che ti consentono di interagire con mongoDB usando SQL. Là la risposta ha applicazione. Inoltre, è per evidenziare che anche in quel caso il _id deve essere castato di tipo.
sourabhxiii

1
si tratta di mongodb
Rohit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.