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 では、V8 JavaScript エンジンが内部的に Error.type プロパティを使用しているため、このプロパティは kind
に名前変更されました。
クエリに .then()
関数があるようになりました
mongoose 3 では、MyModel.find().exec().then();
のように、クエリチェーンに .exec()
を呼び出して約束を取り出す必要がありました。Mongoose 4 のクエリは約束であるため、代わりに MyModel.find().then()
を実行できます。Q.ninvoke()
のような関数を 使用している場合や、mongoose クエリを約束から返している場合は注意してください。
詳細情報
関連するブログ記事