est possible dans mongo db pour sélectionner les documents de la collection comme en SQL:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
ou si j'ai un _id array
je dois sélectionner un par un puis recomposer les array/object
résultats?
Réponses:
Facile :)
db.collection.find( { _id : { $in : [1,2,3,4] } } );
extrait de: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in
O(log(n) * m)
où se n
trouve la taille de la collection et m
le nombre d'identifiants passés?
Parce que mongodb utilise bson
et pour bson est des types d'attributs importants. et parce _id
est que ObjectId
vous devez utiliser comme ceci:
db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );
et en cours d' mongodb compass
utilisation comme ceci:
{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }
Remarque: objectId dans la chaîne a une 24
longueur.
si vous voulez rechercher par utilisateur et aussi par un autre champ comme conditionnellement, vous pouvez facilement le faire comme ci-dessous avec un opérateur étalé et ternaire en utilisant aggregate
etmatch
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),
},
},
Ceci n'est pas lié à la requête mongo. J'étais familier avec SQL et j'ai utilisé Studio3T IDE pour interroger une base de données mongo en utilisant SQL. Si vous êtes comme moi, je tiens à souligner que la valeur de l'identifiant doit être transtypée. La requête ressemblera donc à:
SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");