Мне нужно проверить, имеет ли пользователь данный идентификатор, проект с указанным идентификатором и роль с заданным именем.mongoose query .where/.and after .populate
var UserSchema = new Schema({
roles: [{
project: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Project',
},
role: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Role',
}
}]
});
и
var RoleSchema = new Schema({
name: {
type: String
}
});
I судимого к .populate, а затем применить .где, но .гд ничего не делает.
Использование .and после заполнения также не работает.
Как решить это в mongodb/mongoose?
Спасибо!
// EDIT Сейчас у меня есть что-то подобное, что не работает (.где ничего не делает), и это действительно не красиво:
User.findById(userId)
.populate({
path: 'roles.role',
match: { 'name': roleName}
})
.where('roles.project').equals(projectId)
.exec(function(err, data){
data.roles = data.roles.filter(function(f){
return f.role;
})
if(!err){
if(data){
if(data.roles.length == 1) {
return true;
}
}
}
return false;
});
Когда я делать то, что сказал Кевин B:
Role.findOne({name: roleName}, function(err, data){
if(!err){
if(data){
User.findById(userId)
.and([
{'roles.project': projectId},
{'roles.role': data._id}
])
.exec(function(err2, data2){
if(!err2){
if(data2){
console.log(data2);
}
}
});
}
}
});
запроса й просто ничего не делает здесь ...
Покажите нам свой запрос ... даже не рабочий код здесь имеет значение. –
В этом случае вы должны сначала ** запросить коллекцию ролей для ролей с заданным именем, тогда вам придется запрашивать пользователей, которые упомянули роли и проекты по идентификатору. –