何が起こっているのかというと、findByIdAndUpdate
のような「update」ファミリーのメソッドを呼び出すときに、Mongooseの検証、ミドルウェア、またはデフォルト値のいずれも使用されないということです。 。これらは、save
の呼び出しによってのみ呼び出されます またはcreate
。
これは、「更新」呼び出しがネイティブドライバーへのパススルーであり、Mongooseがスキーマ定義に基づいたフィールドの型キャストのみを提供するためです。
マングース4.0アップデート
Mongooseは、update
中に新しいドキュメントが作成されたときのデフォルトの設定をサポートするようになりました。 、findOneAndUpdate
、またはfindByIdAndUpdate
アップサート。 setDefaultsOnInsert
を設定します true
へのオプション これを有効にします。これは$setOnInsert
を使用します 挿入時にデフォルトを作成する演算子。
var queryOptions = {
upsert: true,
setDefaultsOnInsert: true
};
Company.findByIdAndUpdate(id, company, queryOptions).exec( ...