我对Node和MongoDB有些新意,我遇到了一个非常奇怪的问题。我正在尝试向从MongoDB打印出来的json添加一个新字段。但无论出于何种原因,它都没有出现。谁知道我做错了什么?
这是一个例子
app.Event.find({},['_id','dateStart']).where('status').equals(1).where('dateStart').gte(searchDate).sort('dateStart', -1).exec(function(err, events) {
for (var i=0; i< events.length; i++){
var url = 'http://localhost/' + events[i]._id;
events[i].url = url;
//Printing here does not show the new URL
console.log('Looking at event... ' + events[i]);
//But printing here does show it...
console.log('Address should be ' + events[i].url);
}
//And printing here does not as either...
res.json(events);
});
我知道我可以将字段添加到我的架构中,这不是我想要的。当我向模式添加虚拟字段URL时,我仍然没有在结果中看到它:
Event.virtual('url').get(function() {
return 'http://localhost/' + this._id;
});
Event.set('toJSON', {
virtuals: true
});
Event.set('toObject', {
virtuals: true
});
答案 0 :(得分:0)
如果您在上创建模型之后在虚拟模式上创建了模型(与模型名称相同,是否正确?)。
所以这不起作用:
var Schema = new mongoose.Schema(...);
var Model = mongoose.model('Model', Schema);
Schema.virtual('url').get(...);
但这应该:
var Schema = new mongoose.Schema(...);
Schema.virtual('url').get(...);
var Model = mongoose.model('Model', Schema);
(仍需要toJSON
和toObject
的配置)