Quando affronti solo uno campo, devi solo esprimere il percorso del tuo campo usando la notazione punto:
> db.user.find({"profile.wishlist._id": 2})
Come spiegato in Documentazione MongoDB
, per gli array (come wishlist
) questo corrisponderà a un documento se qualsiasi documento secondario nell'array corrisponde al valore del campo.
Tieni presente che se devi confrontarti con diversi campi, devi utilizzare uno dei seguenti:
$elemMatch
se tutti i campi corrispondenti devono appartenere allo uguale documento secondario;- o più campi espressi utilizzando la notazione punto se non è necessario che i vari campi corrispondano allo stesso documento secondario.
Si prega di confrontare l'output di queste due query per avere un'idea di questo:
> 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