é possível no mongo db selecionar os documentos da coleção como no SQL:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
ou se eu tiver um, _id array
devo selecionar um por um e recompor os array/object
resultados?
Fácil :)
db.collection.find( { _id : { $in : [1,2,3,4] } } );
retirado de: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in
O(log(n) * m)
onden
está o tamanho da coleção em
o número de ids passados?Nesta lista de códigos está a matriz de ids na coleção do usuário
var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"] .find({ _id: {$in : list}})
fonte
Porque mongodb usa
bson
e para bson são tipos de atributos importantes. e porque_id
éObjectId
você deve usar assim:db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );
e em
mongodb compass
uso como este:{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }
Nota: objectId na string tem
24
comprimento.fonte
se você quiser encontrar por usuário e também por outro campo como condicionalmente, você pode facilmente fazer como abaixo com spread e operador ternário usando
aggregate
ematch
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), }, },
fonte
Você pode tentar isso
var ids = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"]; var oids = []; ids.forEach(function(item){ oids.push(new ObjectId(item)); }); .find({ _id: {$in : oids}})
fonte
Isso não está relacionado à consulta do mongo. Eu estava familiarizado com SQL e usei o Studio3T IDE para consultar um banco de dados mongo usando SQL. Se você for como eu, gostaria de salientar que o valor do id precisa ser marcado. Portanto, a consulta será semelhante a:
SELECT _id from <collectionName> WHERE _id = ObjectId("5883d387971bb840b7399130");
fonte