手动加载Mongoose模型实例

时间:2015-03-04 21:03:10

标签: node.js mongodb mongoose

如何从对象创建模型实例并让Mongoose知道它已经存在?我正在从缓存加载数据,所以它始终是最新的。

我尝试过使用

var instance = new SomeModel({ '_id': '...', field1: '...', field2: '...' });

但是这样Mongoose认为它是一个要插入的新对象,而不是已经存在的对象。致电instance.modifiedPaths()会返回['_id', 'field1', 'field2']。因此,如果我调用instance.save(),它将尝试再次插入它并抛出重复键错误。

做正确的方法是什么?

2 个答案:

答案 0 :(得分:1)

有一个标志指示记录是否为新记录,您可以在调用save之前覆盖它:

var instance = new SomeModel({ '_id': '...', field1: '...', field2: '...' });
instance.isNew = false;
instance.save(function(err) { /* ... */ });

在这种情况下,Mongoose会更新记录而不是尝试插入记录。

然而,这很奇怪,您确定使用find或其某些变体来查询数据库中的文档是不是更好?

答案 1 :(得分:0)

没有文档的Document.init()功能正是如此。它接受一个回调作为最后一个参数,而实际上目前是无用的 - 当前实现不是异步的,回调永远不会收到错误。但是,它可能在将来发生变化,因此推荐的解决方案是:

function load (model, data, callback)
{
    var w = new model();
    w.init(data, {}, function (err)
    {
        if (err) return callback(err);
        callback(null, w);
    });
}
相关问题