从 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 查询,请小心。
更多信息
相关博文