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 arrayi muszę wybierać jeden po drugim, a następnie ponownie komponować array/objectwyniki?
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 njest rozmiar kolekcji i mczy liczba przekazanych identyfikatorów?
Ponieważ mongodb używa bsoni dla bson jest ważnymi typami atrybutów. i ponieważ _idto ObjectIdnależy użyć tak:
db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );
i w mongodb compassużyciu w ten sposób:
{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }
Uwaga: objectId w łańcuchu ma 24dł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 aggregateimatch
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");