Sementara disebutkan bahwa memang $and
operator tidak diperlukan, dalam kedua bentuk ini bukan kueri yang Anda inginkan. Pertimbangkan hal berikut:
db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })
Ini sebenarnya memang cocok dengan catatan yang diberikan karena ada kedua elemen dengan nilai "FirstName" sama dengan "alice" dan "lastName" sama dengan "jones". Tapi tentu saja masalahnya di sini sederhana karena tidak ada elemen aktual dalam array yang memiliki sub-dokumen untuk kedua nilai tersebut.
Untuk mencocokkan di mana elemen array berisi "kedua" kriteria yang diberikan, Anda perlu menggunakan $elemMatch
operator. Ini menerapkan kondisi kueri ke "elemen" larik.
db.user.find_one({
'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})
Dan tentu saja jika Anda mencoba "alice" dan "jones" maka itu tidak akan cocok karena tidak ada elemen yang benar-benar mengandung operasi itu.