对Mongoose文档感到困惑....它声明了model.js save():
product.sold = Date.now();
product.save(function (err, product, numberAffected) {
if (err) ..
})
回调将收到三个参数,错误是发生错误,product是保存的产品,numberAffected是在数据库中找到并更新文档时为1,否则为0。
当我将新文档插入到我的模型/数据库中时,我得到numberAffected 1.但是从文档中可以看出1,如果找到该文档...那不意味着该文档之前存在并且它会更新而不是创作?
要明确的是,我创建的文档总是新的,永远不会存在。从来没有预先存在的文档得到更新而不是插入。然而,我得到numberAffected 1
答案 0 :(得分:1)
不,它不会,原因是.save()
更像是.update()
的便利包装器,但包括“upsert”功能。可以这样想:
Model.update(
{ _id: obj._id },
obj,
{ upsert: true },
function(err,numAffected) {
return [err, obj, numAffected];
}
)
不完全是实现,但它有助于以这种方式可视化。
因此,第三个参数是受影响的数字,但是“更新”部分,如果这导致实际“上传”的新文档,则为0。与从.update()
方法返回的内容非常相似,该值将是受更新影响的文档数,但仅限于将“更新”应用于现有文档的位置。