Mongoose 4.x“model.update()”回调改变

Posted

技术标签:

【中文标题】Mongoose 4.x“model.update()”回调改变【英文标题】:Mongoose 4.x "model.update()" callback changed 【发布时间】:2015-07-29 10:26:58 【问题描述】:

在 mongoose 4.x 之前,在 update() 中,您可以检查回调中的第二个参数,以查看是否找到了文档。在下面的示例中,您可以使用“rowAffected”查看是否存在用户名为 john 的文档。

model.update( username: "john" ,  ... , function(err, rowAffected) 
    if (rowAffected) // document found

但现在从 mongoose 4.x 开始,回调中的第二个参数成为 MongoDB 更新操作的原始输出。所以要查找文档是否存在,我必须做 raw.n

model.update( username: "john" ,  ... , function(err, raw) 
    if (raw.n) // document found

我的问题是“rowAffected”和“raw.n”是一回事?如果是这样,从 3.x 迁移到 4.x 时替换所有受 raw.n 影响的 rowAffected 是否安全?

【问题讨论】:

【参考方案1】:

是的,它们是一样的。根据4.0 release notes:

#2552: 将 mongodb 驱动升级到 2.0.x。 Mongoose 是 MongoDB 节点驱动程序之上的包装层。最近的mongodb驱动 发布了 2.0 版,其中包括许多性能和 可用性改进。但是,新驱动程序引入了一些 影响您使用 Mongoose 方式的更改:

如果您正在连接到 一个副本集,您必须在 连接字符串。 update 从 MongoDB 返回一个结果对象 服务器,而不仅仅是受影响的数量。第二个参数为 回调现在看起来像 ok: 1, n: 3 而不是简单的 受影响的人数。

【讨论】:

以上是关于Mongoose 4.x“model.update()”回调改变的主要内容,如果未能解决你的问题,请参考以下文章

mongoose Model.update() - 只更新提供的值

mongoose Model.update() - 只更新提供的值

.save() 和使用 update() 之间的猫鼬区别

猫鼬实例 .save() 不工作

猫鼬实例 .save() 不工作

Mongoose 5.x.x:创建架构需要“新”吗?