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

Finden Sie Dokumente mit einem Array, das keinen bestimmten Wert enthält

Nichts ist falsch an dem, was Sie im Grunde versuchen, aber vielleicht ist die einzige Klarstellung hier das allgemeine Missverständnis, dass Sie Operatoren wie $nin benötigen oder $in beim Abfragen eines Arrays.

Außerdem müssen Sie hier unbedingt eine grundlegende Ungleichheitsübereinstimmung mit $ne durchführen :

Person.find({ "groups": { "$ne": group._id } })

Die "Array"-Operatoren sind nicht für "Array-Ziele", sondern um eine "Liste" von zu testenden Bedingungen in einer bequemen Form bereitzustellen.

Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })

Verwenden Sie also einfach normale Operatoren für einzelne Bedingungen und speichern Sie $in und $nin wenn Sie mehr als eine Bedingung gegen einen einzelnen Wert oder eine Liste testen möchten. Es ist also genau umgekehrt.

Wenn Sie eine „Liste“ von Argumenten übergeben müssen, bei der „keiner“ der Argumente in der bereitgestellten Liste mit dem Inhalt des Arrays übereinstimmt, kehren Sie die Logik mit $not um -Operator und $all Betreiber:

Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })

Das bedeutet also, dass "keiner der bereitgestellten Listen" im Array vorhanden ist.