Rien de mal avec ce que vous essayez fondamentalement, mais peut-être que la seule clarification ici est l'idée fausse commune selon laquelle vous avez besoin d'opérateurs comme $nin
ou $in
lors de l'interrogation d'un tableau.
De plus, vous devez vraiment faire ici une correspondance d'inégalité de base avec $ne
:
Person.find({ "groups": { "$ne": group._id } })
Les opérateurs de "tableau" ne sont pas destinés aux "cibles de tableau" mais à fournir une "liste" de conditions à tester sous une forme pratique.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
Utilisez donc simplement des opérateurs normaux pour des conditions uniques et économisez $in
et $nin
pour lequel vous souhaitez tester plusieurs conditions par rapport à une seule valeur ou à une liste. C'est donc tout simplement l'inverse.
Si vous avez besoin de passer une "liste" d'arguments où "aucun" de ceux de la liste fournie ne correspond au contenu du tableau, vous inversez la logique avec le $not
opérateur et le $all
opérateur :
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
Cela signifie donc qu'"aucune des listes" fournies n'est présente dans le tableau.