Hoewel wordt vermeld dat inderdaad de $and
operator is niet vereist, in beide vormen is dit niet de zoekopdracht die u wilt. Overweeg het volgende:
db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })
Dit in feite match het gegeven record aangezien er beide elementen zijn met "firstName" gelijk aan "alice" en "lastName" waarden gelijk aan "jones". Maar het probleem hier is natuurlijk eenvoudig omdat er geen echt element in de array is dat een subdocument heeft voor beide waarden.
Om te matchen waar een array-element "beide" de opgegeven criteria bevat, moet u de $elemMatch
exploitant. Dit past de queryvoorwaarde toe op de "elementen" van de array.
db.user.find_one({
'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})
En natuurlijk, als je "alice" en "jones" zou proberen, zou dat niet overeenkomen, omdat geen enkel element die bewerking daadwerkelijk bevat.