猫鼬文档中的错误?模型 save() numberAffected 1 用于更新而不是创建?
Posted
技术标签:
【中文标题】猫鼬文档中的错误?模型 save() numberAffected 1 用于更新而不是创建?【英文标题】:Error in Mongoose Documentation? Model save() numberAffected 1 for update rather creation? 【发布时间】:2014-07-29 13:49:44 【问题描述】:对 Mongoose 文档感到困惑......它为 model.js save() 声明:
product.sold = Date.now();
product.save(function (err, product, numberAffected)
if (err) ..
)
回调将接收三个参数,如果发生错误则为err,product为保存的产品,numberAffected在数据库中找到并更新文档时为1,否则为0。
当我在我的模型/数据库中插入一个新文档时,我得到 numberAffected 1。但是从文档中,如果找到该文档,则为 1...这是否意味着该文档之前存在并且它会更新而不是创造?
需要明确的是,我创建的文档始终是新的,绝不是预先存在的。从来没有预先存在的文档被更新而不是插入。然而,我得到 numberAffected 1
【问题讨论】:
【参考方案1】:不,它不会,原因是.save()
更像是.update()
的便利包装,但包括“upsert”功能。可以这样想:
Model.update(
_id: obj._id ,
obj,
upsert: true ,
function(err,numAffected)
return [err, obj, numAffected];
)
不完全是实现,但它有助于以这种方式可视化。
所以第三个参数是受影响的数字,但是是“更新”部分,如果这导致一个实际上被“更新”的新文档,则该参数为 0。与 .update()
方法返回的值非常相似,该值将是受更新影响的文档数,但仅限于“更新”应用于现有文档的情况。
【讨论】:
如何判断/获取返回值以表明文档是否存在并已更新,或者是否使用模型 api save() 创建了新文档? @dman 正如已经说明的那样。如果回调中的 numAffected 值为 0,则文档已插入。如果不是和 1 则它已经存在。 我没有看到它。我的文档总是新的并且被插入...从来没有更新过的预先存在的文档...但是返回 numberAffected 1。以上是关于猫鼬文档中的错误?模型 save() numberAffected 1 用于更新而不是创建?的主要内容,如果未能解决你的问题,请参考以下文章