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.