Som du kun spiller mod én felt, skal du kun udtrykke stien til dit felt ved hjælp af punktnotation:
> db.user.find({"profile.wishlist._id": 2})
Som forklaret i MongoDB-dokumentation
, for arrays (som wishlist
) dette vil matche et dokument, hvis noget underdokument i arrayet matcher feltværdien.
Bemærk venligst, at hvis du skal matche mod flere felter, skal du bruge enten:
$elemMatch
hvis alle matchende felter skal tilhøre den samme underdokument;- eller flere felter udtrykt ved hjælp af punktnotationen, hvis de forskellige felter ikke behøver at matche det samme underdokument.
Sammenlign venligst outputtet af disse to forespørgsler for at få en forståelse af dette:
> 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