Въпреки че се споменава, че наистина $andкод>
не е задължителен, и в двете форми това не е заявката, която искате. Имайте предвид следното:
db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })
Това всъщност прави съответства на дадения запис, тъй като има и два елемента със стойности „firstName“, равни на „alice“, и „lastName“, равни на „jones“. Но, разбира се, проблемът тук е прост в това, че няма действителен елемент в масива, който има поддокумент и за двете стойности.
За да съвпаднете, когато елемент от масив съдържа „и двата“ дадени критерии, трябва да използвате $elemMatch
оператор. Това прилага условието на заявката към "елементите" на масива.
db.user.find_one({
'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})
И разбира се, ако опитате "alice" и "jones", тогава това няма да съвпадне, тъй като никой елемент всъщност не съдържа тази операция.