在mongoose虚拟,这是空的对象

好吧,我是新来的mongoose,并试图了解如何使用虚拟属性。 这是我一直在testing的示例代码。

var mongoose = require('mongoose'); var Schema = mongoose.Schema; var objSchema = new Schema({ created: {type: Number, default: Date.now()}, }); objSchema.virtual('hour').get(()=>{ //console.log(this); var d = new Date(this.created); return d.getHours(); }); var obj = mongoose.model('obj', objSchema); var o = new obj(); o.toObject({virtuals: true}); console.log(o.created); console.log(o.hour); 

所以我希望日志是这样的:

 1457087841956 2 

但输出是

 1457087841956 NaN 

当我在虚拟获得者的开始处logging“this”时,它会打印{}。 我究竟做错了什么?

问题是virtual arrow function使用的arrow function ,在这里可以find同样的问题ES6匿名函数和模式方法 ,原因是词法这个function的arrow function

要解决它,请更改您的代码如下

 objSchema.virtual('hour').get(function(){ console.log(this.created); var d = new Date(this.created); return d.getHours(); });