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

Mongodb Mongoose:如何访问模式方法中的select:false属性?,mongodb,mongoose,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(thi

快速代码:

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
    ...
};

我不希望密码在默认情况下可以访问,但我需要一种方法来检查用户输入的密码,然后再验证用户。我知道我可以对数据库进行查询以包含这些值,但是我对如何访问schema方法本身的hidden属性有点迷茫
方法本身中的这个
只是返回的查询,所以看起来它是不可访问的?我是否应该在别处执行
checkPassword()
功能?

您可以使用
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;
    });
}

我希望这可能会对您有所帮助。

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

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

因此,似乎无法从
架构中访问
select:false
属性。方法本身必须将其传递给回调。知道了!谢谢。@Khay,我收到一个错误,
find()。select不是一个函数
@PulkitAggarwal请检查您用于
find()
的架构名称。可能有打字错误。是否可以选择多个字段。例如
const user=await user.findOne({email})。选择('emailVerified','password')