Node.js Mongoose虚拟设定器似乎不起作用

Node.js Mongoose虚拟设定器似乎不起作用,node.js,mongodb,database-schema,Node.js,Mongodb,Database Schema,我的猫鼬版本是4.0.7。 我的模式中有以下虚拟对象: ProjectSchema.virtual("idName") .get(function(name){ return this.duration + this.name; }); ProjectSchema.virtual("deadline") .set(function(period){ this._deadline = period; co

我的猫鼬版本是4.0.7。 我的模式中有以下虚拟对象:

ProjectSchema.virtual("idName")
        .get(function(name){
            return this.duration + this.name;

});
ProjectSchema.virtual("deadline")
        .set(function(period){
         this._deadline = period;
         console.log(this._deadline);

        }).get(function(){
                    return this._deadline;
                     console.log("got");
                });


ProjectSchema.set("toJSON", {getters:true,virtuals:true});
ProjectSchema.set("toObject", {getters: true,virtuals:true});
所以我的第一个虚拟名为“idName”,我只是为了测试它工作得很好。 当我打电话时:

db.Project.findOne({name:proj.name},function(err,data){ console.log(data.get("idName"));});
然而,对于我的“截止期”虚拟机,同样的操作也适用于未定义的setter日志,这非常奇怪。事实上,我是这样测试的:

var newproject = new db.Project({
        _id:Math.floor(Math.random()*934959349),
        name: proj.name,
        desc: proj.desc,
        duration: proj.duration, 
        team: proj.team,
        leader: proj.leader,
        deadline: "2 weeks"
    });
        newproject.save();
我不明白为什么虚拟与setter和getter的结合不起作用。基本上,我在我的用户模式中有相同的设置:

     UserSchema.virtual('password')
.set(function(password) {
    this._plainPassword = password;
    this.salt = crypto.randomBytes(32).toString('base64');
    //more secure - this.salt = crypto.randomBytes(128).toString('base64');
    this.hashedPassword = this.encryptPassword(password);
})
.get(function() {
    return this._plainPassword;
});

我不明白为什么这对setter和内部变量有效,而“deadline”虚拟无法工作。请帮助

请解释一下“似乎不起作用”和“不起作用”的含义。是否有错误消息?如果是,请将其添加到问题中。无错误消息。data.get(“截止日期”)未定义。而另一个虚拟(“idName”)是在没有setter的情况下初始化的,它与data.get(“idName”)一起工作,并在我将数据转换为JSON或带有data.toObject()或data.tojson的对象时与其他属性一起返回。请解释一下“似乎不起作用”和“不起作用”的含义。是否有错误消息?如果是,请将其添加到问题中。无错误消息。data.get(“截止日期”)未定义。而其他虚拟(“idName”)是在没有setter的情况下初始化的,它与data.get(“idName”)一起工作,并在我将数据转换为JSON或使用data.toObject()或data.toJSON的对象时与其他属性一起返回