Como você só joga contra um campo, você só precisa expressar o caminho para o seu campo usando notação de ponto:
> db.user.find({"profile.wishlist._id": 2})
Conforme explicado no Documentação do MongoDB , para matrizes (como
wishlist
) corresponderá a um documento se qualquer subdocumento na matriz correspondem ao valor do campo. Observe que, se você precisar corresponder a vários campos, você precisa usar:
$elemMatch
se todos os campos correspondentes devem pertencer ao mesmo subdocumento;- ou vários campos expressos usando a notação de ponto se os vários campos não precisarem corresponder ao mesmo subdocumento.
Por favor, compare a saída dessas duas consultas para entender isso:
> 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