MongooseJS return 是否是 save() 上的新结果对象?

Does MongooseJS return a new fresh result object on save()?

默认情况下 MongoDB on collection.save() returns 文档中所述的 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 and/or 创建日期?

如果你看一下 Model.prototype.save():

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

看起来您在 userResult.

中找回了相同的模型实例 (self)

为了回答你的问题,返回的对象是一个新对象 -- 不是原来的对象(所以 user != userResult

Mongoose 支持一些 options -- new: truelean: false 设置您可能会感兴趣,以修改不同操作中返回数据的方式(如果您希望它是一个新的选择或不关心)。

您可以使用以下方法验证 'new object' 是否如此:

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