es posible en mongo db seleccionar los documentos de la colección como en SQL:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
o si tengo un _id array
debo seleccionar uno por uno y luego recomponer los array/object
resultados?
Respuestas:
Fácil :)
db.collection.find( { _id : { $in : [1,2,3,4] } } );
extraído de: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in
O(log(n) * m)
dónde n
está el tamaño de la colección y m
el número de identificadores pasados?
Porque mongodb usa bson
y para bson son tipos de atributos importantes. y porque _id
es ObjectId
usted debe usar la siguiente manera:
db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );
y en mongodb compass
uso así:
{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }
Nota: objectId en cadena tiene 24
longitud.
si desea buscar por usuario y también por otro campo como condicionalmente, puede hacerlo fácilmente como a continuación con el operador de propagación y ternario usando aggregate
ymatch
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),
},
},
Esto no está relacionado con la consulta mongo. Estaba familiarizado con SQL y usé Studio3T IDE para consultar una base de datos mongo usando SQL. Si eres uno como yo, quiero señalar que el valor de id debe ser redactado. Entonces la consulta se verá así:
SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");