Mongoose 4.x“model.update()”callback已更改

在mongoose 4.x之前,在update()中,你可以检查callback中的第二个参数来查看文档是否被find。 在下面的示例中,可以使用“rowAffected”来查看是否存在具有用户名john的文档。

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

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

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

我的问题是“rowAffected”和“raw.n”是一回事吗? 如果是这样,从3.x迁移到4.x时,replaceraw.n中的所有rowA是否安全?

是的,他们是一样的东西。 根据4.0发行说明 :

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

  • 如果连接到副本集,则必须在连接string中指定replicaSet选项。
  • update 从MongoDB服务器返回一个结果对象,而不仅仅是受影响的数字。 callback的第二个参数现在看起来像{ ok: 1, n: 3 }而不仅仅是受影响的数字。