Mongoose文档中的错误?模型save()numberAffected 1用于更新而非创建?

时间:2014-06-09 03:16:06

标签: node.js mongodb mongoose

对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

1 个答案:

答案 0 :(得分:1)

不,它不会,原因是.save()更像是.update()的便利包装器,但包括“upsert”功能。可以这样想:

Model.update(
    { _id: obj._id }, 
    obj, 
    { upsert: true },
    function(err,numAffected) {

       return [err, obj, numAffected];
    }
)

不完全是实现,但它有助于以这种方式可视化。

因此,第三个参数是受影响的数字,但是“更新”部分,如果这导致实际“上传”的新文档,则为0。与从.update()方法返回的内容非常相似,该值将是受更新影响的文档数,但仅限于将“更新”应用于现有文档的位置。