Zoals je alleen tegen één veld hoeft u alleen het pad naar uw veld uit te drukken met behulp van puntnotatie:
> db.user.find({"profile.wishlist._id": 2})
Zoals uitgelegd in de MongoDB-documentatie
, voor arrays (zoals wishlist
) dit komt overeen met een document indien enig subdocument in de array komt overeen met de veldwaarde.
Houd er rekening mee dat als je moet matchen met verschillende velden, moet u een van de volgende gebruiken:
$elemMatch
als alle overeenkomende velden bij dezelfde moeten horen subdocument;- of meerdere velden uitgedrukt met de puntnotatie als de verschillende velden niet hoeven te matchen met hetzelfde subdocument.
Vergelijk de uitvoer van deze twee zoekopdrachten om dit te begrijpen:
> 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