é 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?
Respostas:
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)
onde n
está o tamanho da coleção e m
o número de ids passados?
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.
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),
},
},
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");