Comment écrire une mangouste requête pour filtrer les sous-documents
J'ai une Mangouste schéma appelé "Utilisateurs" qui a un "Rôle" sous-document en tant que l'une de ses variables comme:
var UserSchema = new mongoose.Schema({
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
roles: [ { type: Number, ref: 'Role' } ]
});
var RoleSchema = new mongoose.Schema({
_id: Number,
name: { type: String, required: true, unique: true },
description: { type: String, required: true }
});
Je veux créer une Mangouste requête qui permettra de trouver tous les utilisateurs avec des rôles.les noms de "admin" ou "propriétaire". J'ai essayé d'utiliser cette requête, ce qui me semblait, mais je n'ai pas tout les utilisateurs lorsque j'utilise le where...in
partie.
var roles = ["owner", "admin"];
User.find()
.populate('roles')
.where('roles.name').in(roles)
.sort({'_id': 1})
.exec(function (err, users) {
res.send(users);
});
Quelqu'un peut-il me dire d'où ma logique est faux?
Vous devez vous connecter pour publier un commentaire.
Il n'est pas possible d'interroger plus d'une collection avec une seule requête. Si
Role
a été incorporée sous-document dansUser
ensuite, vous pouvez faire une requête surroles.name
mais, actuellement, ce n'est pas pris en charge car c'est une collection à part qui est référencé dansUser
.Cependant, une solution est d'ajouter une autre étape de filtre après la requête retourne des que manuellement les filtres de documents qui n'ont pas de rôles qui correspondent à la remplir critères, mais d'abord vous devez utiliser une requête de correspondance dans remplir au lieu de la méthode:
C'est intégré dans la Mangouste
populate()
ici . Vous pouvez simplement la structure d'une requête comme ceci: