MongooseJS是否在save()上返回一个新的结果对象?

时间:2015-05-07 15:03:22

标签: node.js mongodb mongoose

默认情况下,collection.save()上的MongoDB返回一个WriteResult对象,如文档中所述:

The save() returns a WriteResult object that contains the status of the insert or update operation.

但是使用Mongoose(我猜是节点中的基础mongodb驱动程序),您可以添加第二个参数,该参数使用刚刚插入的整个对象和新的_id填充:

var user = new User(req.body);

user.save(function (err, userResult) {
    if (err) {
        log.error(err);
    }
    log.debug('User data: ', userResult);
});

所以我的问题: userResult是否包含来自Mongo的检索数据并且它是一个新对象或者是已传递到save()方法的对象,并且数据库调用仅与一些部分数据合并,例如生成的_id和/或创建日期?

2 个答案:

答案 0 :(得分:1)

如果您查看Model.prototype.save()

https://github.com/Automattic/mongoose/blob/8cb0e35/lib/model.js#L254

您似乎在self中找回了相同的模型实例(userResult)。

答案 1 :(得分:0)

要回答您的问题,返回的对象是一个新对象-不是原始对象(因此user!= userResult

猫鼬支持一些options-new: truelean: false设置,您可能会想修改在不同操作中返回数据的方式(如果您希望它是新的)选择还是忽略)。

您可以使用以下方法来验证是否为“新对象”:

var user = new User(req.body);

user.save(function (err, userResult) {
    if (err) {
        log.error(err);
    }

    user.name = 'TEST';
    console.log(`${userResult.name} will be undefined but ${user.name} will not be`);
    log.debug('User data: ', userResult);
});