Mongoose:如何在模式方法中访问select:false属性?

时间:2015-03-03 17:57:20

标签: mongodb mongoose

快速代码:

var userSchema = new mongoose.Schema({
    username: String,
    password: {type: String, select: false}
});

userSchema.methods.checkPassword = function(password, done) {
    console.log(password);      // Password to check
    console.log(this.password); // stored password
    ...
};

我不希望默认情况下可以访问密码,但我需要一种方法来在验证用户之前检查用户输入的密码。我知道我可以对数据库进行查询以包含这些值,但是我对如何访问模式方法本身的隐藏属性有点迷茫。方法本身中的this只是返回的查询,所以它似乎无法访问?我应该在其他地方执行checkPassword()功能吗?

2 个答案:

答案 0 :(得分:6)

您可以使用select在查询中选择密码。这是一个示例查询。

User.findOne().select('password').exec(callback);

这一定是你要检查密码的。

userSchema.methods.checkPassword = function(password, done) {
    User.findOne({username: this.username}).select('password').exec(function (err, user) {
        if (user.password == password)
            return true;
        else 
            return false;
    });
}

我希望这对你有所帮助。

答案 1 :(得分:0)

正确的方法是在方法 findOne 上编写字段。您可以询问要返回的字段。在您的情况下,它应该是:

await User.findOne({ username: this.username }, 'password').exec();

文档: mongoose.findOne