Mens det nævnes, at $and
operatør er ikke påkrævet, i begge former er dette ikke den forespørgsel, du ønsker. Overvej følgende:
db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })
Dette gør faktisk matche den givne post, da der er begge elementer med "firstName" lig med "alice" og "lastName" værdier lig med "jones". Men problemet her er selvfølgelig simpelt, idet der ikke er noget egentligt element i arrayet, der har et underdokument for begge disse værdier.
For at matche, hvor et array-element indeholder "begge" de angivne kriterier, skal du bruge $elemMatch
operatør. Dette anvender forespørgselsbetingelsen på "elementerne" i arrayet.
db.user.find_one({
'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})
Og selvfølgelig, hvis du prøvede "alice" og "jones", ville det ikke matche, da intet element faktisk indeholder den operation.