默认情况下,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和/或创建日期?
答案 0 :(得分:1)
如果您查看Model.prototype.save()
:
https://github.com/Automattic/mongoose/blob/8cb0e35/lib/model.js#L254
您似乎在self
中找回了相同的模型实例(userResult
)。
答案 1 :(得分:0)
要回答您的问题,返回的对象是一个新对象-不是原始对象(因此user
!= userResult
)
猫鼬支持一些options-new: true
和lean: 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);
});