循环浏览Mongo结果NodeJS并添加字段或使用虚拟

时间:2013-11-16 20:10:43

标签: node.js mongodb

我对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
});

1 个答案:

答案 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);

(仍需要toJSONtoObject的配置)