sql >> Database >  >> NoSQL >> MongoDB

MongoDB zoekt naar elk dictaat in lijst in verzameling

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.



  1. Opvulling in SQL

  2. spring-data-mongo - optionele queryparameters?

  3. Verbetering van MongoDB tekstzoekprestaties

  4. Als ik een mongo-document-ID als een string heb, hoe vraag ik er dan naar als een _id?