Node获取object数组中的第一个元素

时间:2017-11-28 14:16:07

标签: javascript node.js mongoose

我试图在我的架构之间建立一些关系,但我的解决方案存在一些问题。

用户架构:

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");
                }
            })

我需要访问第一个权限元素,谢谢。

1 个答案:

答案 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]);
    })