我试图在我的架构之间建立一些关系,但我的解决方案存在一些问题。
用户架构:
let userSchema = new mongoose.Schema({
username: { type:String, default:null },
gender: { type:String, default:null },
role: { type: mongoose.Schema.Types.ObjectId, ref: 'Role', required: true },
});
角色架构:
let roleSchema = new mongoose.Schema({
name: { type:String, default:"Player" },
privileges:
[
{
resource: String ,
actions: [ String ]
},
],
});
我的查询是
User.find({ "email":email }).populate({path: 'role', model: 'Role'}).limit(1).exec().
then(results => {
if (results.length) {
user = results[0];
console.log(user.role.privileges);
}
else {
throw new APIError("login_failed");
}
})
我需要访问第一个权限元素,谢谢。
答案 0 :(得分:1)
Mongoose(和一般的Node)返回的第一个参数不是您的数据。这是错误(如果有的话)。你需要写then( (error, results) => {
我需要访问权限的第一个元素
privileges
是一个数组,只需使用:
user.role.privileges[0]
另外,您也可以使用Mongoose的.findOne()
方法,而不是.find().limit(1)
:
User
.findOne({ email }) // Shorthand for { email : email }
.populate({path: 'role', model: 'Role'})
.exec()
.then( (error, user) => {
if(error || !user) throw new APIError("login_failed");
console.log(user.role.privileges[0]);
})