MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoose obtient les documents correspondant au tableau

Tant que vous vous rendez compte que vous correspondez à l'ObjectId et non à quoi que ce soit dans la collection référencée, vous pouvez utiliser le $in opérateur :

db.collection.find({ "members": { "$in": [ "some id 1", "some id 2" ] } })

Où bien sûr ce sont vos valeurs ObjectId réelles.

Mais si vous voulez vraiment dire un document qui a exactement ce tableau, alors vous transmettez simplement le tableau :

db.collection.find({ "members": [ "some id 1", "some id 2" ] })

Et s'il doit avoir les deux éléments mais pourrait en avoir d'autres, vous devez actuellement utiliser un $and expression :

db.collection.find({ "$and": [ 
    { "members": "some id 1" },
    { "members": "some id 2" } 
]})

Mais à partir de la version 2.6 et suivantes, vous pouvez utiliser correctement le $all opérateur de faire effectivement la même chose :

db.collection.find({ "members": { "$all": [ "some id 1", "some id 2" ] } })

L'autre forme correspond à ces deux éléments uniquement, mais dans n'importe quel ordre. Il existe donc deux approches :

db.collection.find({ "$or": [
    { "members": [ "some id 1", "some id 2" ] },
    { "members": [ "some id 2", "some id 1" ] }
]})

Cela utilise un $or logique pour dire que le tableau doit être exact mais peut être arrangé dans les deux sens. Et l'autre approche :

db.collection.find({ "$and": [ 
    { "members": "some id 1" },
    { "members": "some id 2" }
    { "members": { "$size": 2 } }
]})

Donc, cela utiliserait $size afin de s'assurer que lorsque le tableau contenait les deux éléments correspondants, il n'en avait que deux éléments. Ce qui est une syntaxe plus agréable que d'utiliser $or , en particulier pour les grands tableaux.

Et dans les futures versions, comme mentionné, cela devient encore plus propre :

db.collection.find({ "$and": [ 
    { "members": { "$all": [ "some id 1", "some id 2" ] } },
    { "members": { "$size": 2 } }
]})

Cela couvre à peu près toutes les interprétations