Тъй като всеки мач срещу един поле, трябва само да изразите пътя до вашето поле с точкова нотация:
> db.user.find({"profile.wishlist._id": 2})
Както е обяснено в Документация на MongoDB
, за масиви (като wishlist
) това ще съответства на документ, ако има такъв поддокумент в масива съответства на стойността на полето.
Моля, имайте предвид, че ако трябва да съпоставите няколко полета, трябва да използвате или:
$elemMatch
ако всички съвпадащи полета трябва да принадлежат към едно и също поддокумент;- или множество полета, изразени с помощта на точкова нотация, ако не е необходимо различните полета да съвпадат с един и същи поддокумент.
Моля, сравнете резултатите от тези две заявки, за да разберете това:
> 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