MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB sucht nach jedem Diktat in der Liste in der Sammlung

Es wird zwar erwähnt, dass tatsächlich der $and Operator nicht erforderlich ist, ist dies in beiden Formen nicht die gewünschte Abfrage. Beachten Sie Folgendes:

db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })

Dies tatsächlich mit dem angegebenen Datensatz übereinstimmen, da es beide Elemente mit „firstName“-Werten gleich „alice“ und „lastName“-Werten gleich „jones“ gibt. Aber natürlich ist das Problem hier einfach, da es kein tatsächliches Element im Array gibt, das ein Unterdokument für diese beiden Werte hat.

Um abzugleichen, wo ein Array-Element „beide“ der angegebenen Kriterien enthält, müssen Sie $elemMatch Operator. Dies wendet die Abfragebedingung auf die "Elemente" des Arrays an.

db.user.find_one({ 
    'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})

Und natürlich, wenn Sie "alice" und "jones" versuchten, würde das nicht übereinstimmen, da kein Element diese Operation tatsächlich enthält.