Saat Anda hanya bertanding melawan satu bidang, Anda hanya perlu mengekspresikan jalur ke bidang Anda menggunakan notasi titik:
> db.user.find({"profile.wishlist._id": 2})
Seperti yang dijelaskan dalam Dokumentasi MongoDB
, untuk array (seperti wishlist
) ini akan cocok dengan dokumen jika ada subdocument dalam array cocok dengan nilai field.
Harap dicatat bahwa jika Anda perlu mencocokkan dengan beberapa bidang, Anda harus menggunakan:
$elemMatch
jika semua bidang yang cocok harus milik sama subdokumen;- atau beberapa bidang yang diekspresikan menggunakan notasi titik jika berbagai bidang tidak perlu dicocokkan dengan subdokumen yang sama.
Silakan bandingkan output dari kedua kueri tersebut untuk memahami hal ini:
> 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