猫鼬查询.where/.and after .populate
mongoose query .where/.and after .populate
我需要测试一个用户是否有给定的id,一个项目是否有一个指定的id,一个角色是否有一个给定的名字。
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
}
});
我尝试了 .populate 然后应用 .where,但是 .where 什么也没做。
在填充后使用 .and 也不起作用。
如何在 mongodb/mongoose 中解决这个问题?
谢谢!
//编辑
现在我有类似的东西,它不起作用(.where 什么都不做)而且它真的不漂亮:
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;
});
当我按照 Kevin 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);
}
}
});
}
}
});
.and 查询在这里什么都不做...
现在我只是在程序中而不是在数据库中进行比较。
User.findById(userId)
.populate('roles.role')
.exec(function(err, data){
if(!err){
if(data){
if(data.roles.find(function(element, index, array){
return element.project == projectId && element.role.name == roleName;
}))
return callback(true);
}
}
return callback(false);
});
我需要测试一个用户是否有给定的id,一个项目是否有一个指定的id,一个角色是否有一个给定的名字。
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
}
});
我尝试了 .populate 然后应用 .where,但是 .where 什么也没做。
在填充后使用 .and 也不起作用。
如何在 mongodb/mongoose 中解决这个问题?
谢谢!
//编辑 现在我有类似的东西,它不起作用(.where 什么都不做)而且它真的不漂亮:
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;
});
当我按照 Kevin 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);
}
}
});
}
}
});
.and 查询在这里什么都不做...
现在我只是在程序中而不是在数据库中进行比较。
User.findById(userId)
.populate('roles.role')
.exec(function(err, data){
if(!err){
if(data){
if(data.roles.find(function(element, index, array){
return element.project == projectId && element.role.name == roleName;
}))
return callback(true);
}
}
return callback(false);
});