何が起こっているのかというと、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( ...