Trouver des documents avec l'ensemble qui ne contient pas une valeur spécifique
J'ai le modèle suivant:
var PersonSchema = new Schema({
name: String,
groups: [
{type: Schema.Types.ObjectId, ref: 'Group'}
],
});
Je suis à la recherche pour une requête qui récupère toutes les Personnes qui ne font pas partie d'un certain Groupe (j'.e les personnes du groupe tableau ne contient pas l'id du groupe spécifié).
Je pensais à quelque chose comme cela, mais je ne suis pas sûr qu'il est correct:
Person.find({groups: {$nin: [group._id]})
Vous devez vous connecter pour publier un commentaire.
Rien de mal à ce que vous êtes fondamentalement d'essayer, mais peut-être la seule précision est ici l'idée fausse commune que vous avez besoin d'opérateurs comme
$nin
ou$en
lors de l'interrogation d'un tableau.Aussi vous avez vraiment besoin de faire ici, c'est une inégalité fondamentale match avec
$ne
:Le "tableau" les opérateurs ne sont pas pour le "tableau des objectifs", mais de fournir une "liste" des conditions de test sous une forme commode.
Donc, juste une utilisation normale des opérateurs pour une seule des conditions, et enregistrer
$in
et$nin
pour lequel vous voulez tester plus d'un état contre une seule valeur ou une liste. Donc, c'est juste l'inverse.Si vous avez besoin de passer une "liste" des arguments où "aucun" de ceux dans la liste fournie correspondre au contenu de la matrice puis on inverse la logique avec la
$non
de l'opérateur et de la$all
opérateur:Cela signifie donc que "aucun de la liste" fournis sont présents dans le tableau.
[group._id]
. Si vous avez l'intention de passer une "liste" et assurez-vous qu'aucun de ces éléments dans la liste, puis il ya une autre façon de la représenter.