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?
Odpowiedzi:
Ł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)
gdzie n
jest rozmiar kolekcji i m
czy liczba przekazanych identyfikatorów?
Ponieważ mongodb używa bson
i dla bson jest ważnymi typami atrybutów. i ponieważ _id
to ObjectId
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ść.
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),
},
},
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");