从 3.x 迁移到 4.x

从 Mongoose 3 迁移到 Mongoose 4 时,需要注意几个向后不兼容的变更

findOneAndUpdate() 新字段现在默认情况下为 false

Mongoose 的 findOneAndUpdate()findOneAndRemove()findByIdAndUpdate()findByIdAndRemove() 函数只是 MongoDB 的findAndModify 命令 的包装器。MongoDB 服务器和 MongoDB NodeJS 驱动程序都默认将 new 选项设置为 false,但 mongoose 3 覆盖了此默认值。为了与 MongoDB 服务器文档保持一致,mongoose 将默认使用 false。也就是说,findOneAndUpdate({}, { $set: { test: 1 } }, callback); 将返回在应用 $set 操作之前的文档。

要返回在更新中进行修改的文档,请使用 new: true 选项。

MyModel.findOneAndUpdate({}, { $set: { test: 1 } }, { new: true }, callback);

CastError 和 ValidationError 现在使用 kind 而不是 type 来报告错误类型

在 Mongoose 3 中,CastError 和 ValidationError 具有 type 字段。例如,用户定义的验证错误将具有一个 type 属性,该属性包含字符串 'user defined'。在 Mongoose 4 中,此属性已重命名为 kind,这是由于V8 JavaScript 引擎在内部使用 Error.type 属性

Query 现在有一个 .then() 函数

在 mongoose 3 中,您需要在查询链上调用 .exec() 来获取一个 promise,例如 MyModel.find().exec().then();。Mongoose 4 查询是 promise,因此您可以执行 MyModel.find().then()。如果您使用的是q 的 Q.ninvoke() 或以其他方式从 promise 返回 mongoose 查询,请小心。

更多信息

相关博文