Comme vous ne faites qu'un match contre un champ, vous n'avez qu'à exprimer le chemin vers votre champ en utilisant la notation pointée :
> db.user.find({"profile.wishlist._id": 2})
Comme expliqué dans le Documentation MongoDB
, pour les tableaux (comme wishlist
) cela correspondra à un document s'il y en a un sous-document dans le tableau correspond à la valeur du champ.
Veuillez noter que si vous devez faire correspondre plusieurs champs, vous devez utiliser soit :
$elemMatch
si tous les champs correspondants doivent appartenir au même sous-document ;- ou plusieurs champs exprimés à l'aide de la notation par points si les différents champs n'ont pas besoin de correspondre au même sous-document.
Veuillez comparer le résultat de ces deux requêtes pour mieux comprendre :
> db.user.find({"profile.wishlist._id": 2, "profile.wishlist.name": "a1"})
// ^ ^^
// will return your document even if the was no
// subdocument having both _id=2 and name=a1
> db.user.find({"profile.wishlist": {$elemMatch: { _id: 2, name: "a1"}}})
// ^ ^^
// no result as there was no subdocument
// matching _both_ _id=2 and name=a1