w mongo db można wybrać dokumenty kolekcji takie jak w SQL:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
lub jeśli mam _id array
i muszę wybierać jeden po drugim, a następnie ponownie komponować array/object
wyniki?
Łatwy :)
db.collection.find( { _id : { $in : [1,2,3,4] } } );
zaczerpnięte z: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in
O(log(n) * m)
gdzien
jest rozmiar kolekcji im
czy liczba przekazanych identyfikatorów?Na tej liście kodów znajduje się tablica identyfikatorów w kolekcji użytkownika
var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"] .find({ _id: {$in : list}})
źródło
Ponieważ mongodb używa
bson
i dla bson jest ważnymi typami atrybutów. i ponieważ_id
toObjectId
należy użyć tak:db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );
i w
mongodb compass
użyciu w ten sposób:{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }
Uwaga: objectId w łańcuchu ma
24
długość.źródło
jeśli chcesz znaleźć według użytkownika, a także według innego pola, na przykład warunkowo, możesz to łatwo zrobić jak poniżej z operatorem spreadu i potrójnego, używając
aggregate
imatch
const p_id = patient_id; let fetchingReports = await Reports.aggregate([ ...(p_id ? [ { $match: { createdBy: mongoose.Types.ObjectId(id), patient_id: p_id, }, }, ] : [ { $match: { createdBy: mongoose.Types.ObjectId(id), }, },
źródło
Nie jest to związane z zapytaniem mongo. Znałem SQL i używałem Studio3T IDE do wysyłania zapytań do bazy danych mongo za pomocą SQL. Jeśli jesteś podobny do mnie, chcę zwrócić uwagę, że wartość id musi zostać wpisana na maszynie. Więc zapytanie będzie wyglądać następująco:
SELECT _id from <collectionName> WHERE _id = ObjectId("5883d387971bb840b7399130");
źródło