從 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 欄位。例如,使用者定義的驗證錯誤會具有一個包含字串 'user defined' 的 type 屬性。在 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 查詢,請小心。

更多資訊

相關部落格文章