所以我在快递服务器中使用mongoDb并存储用户信息,如下所示:
var UserSchema = new Schema({
username: { type: String, required: true, index: { unique: true } },
password: { type: String, required: true },
email: {type: String, required: true , index: { unique: true } },
isActive: {type:Boolean, default:false},
signUpDate: {type: Date, default: Date.now()},
roles: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Role"
}
]
});
角色只有一个简单的字段:姓名。
例如,要确定用户是否是管理员,
User.findById(req.SecureUserId).populate('roles').exec((err, user) => {
if (err) {
res.status(500).send({ message: err });
return;
}
for(let roles of user.roles){
if(roles.name === 'admin'){
next();
return;
}
}
但是,这似乎可以更好地查询数据库? 我将如何在mongoDB中做到这一点?
答案 0 :(得分:1)
您可以使用.aggregate()
将单个用户与其角色“加入”,然后运行$match
来验证是否存在名为admin
的角色。如果特定用户没有这种角色,那么聚合将返回一个空数组:
User.aggregate([
{ $match: { _id: req.SecureUserId } },
{
$lookup: {
from: "roles",
localField: "roles",
foreignField: "_id",
as: "roles"
}
},
{ $match: { "roles.name": "admin" } }
]).exec((err, user) => {
if(user.length === 1){
next();
}
})