MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Rechercher des documents avec un tableau qui ne contient pas de valeur spécifique

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.