在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(); });