私はこのようなスキーマを設定しました。マングース更新/ findOneAndUpdate時の型と値の検証方法
作成時に問題なく動作します。必要または間違った型がない場合、検証エラーが発生します。したがって、タイプと値の両方がチェックされます(各フィールドの値を検証する追加の検証関数を追加する場合)
ただし、私は更新またはfindOndAndUpdateを試行します。私はrunValidatorsをtrueに設定しました。何とか動作しますが、欠落しているかどうかを確認するだけです。しかし、型を検証しなかったので、自動的に型を型に変換することができます。
たとえば、isAction(ブール値であることが想定される)を整数に設定すると、自動的にブール値falseに変換されます。したがって、タイプバリデーションをバイパスするのが一種です。そして、それはすでにブール値であるバリデータ関数に入るでしょうが、バリデーション関数を入力する前に型にバリデーションエラーがスローされるはずです。
もう一つの懸案事項は配列とオブジェクトです。オブジェクト内のディーププロパティの型を検証せず、直接検証関数に入りました。
update/findOneAndUpdateを実行すると、型と値の両方を正しく検証する方法があるかどうかを確認したいと思います。
私はいくつかのマングースバリデーターモジュールを検索しましたが、そのほとんどは各フィールドのバリデート機能のヘルパーです。したがって、これらのデータはすでに整数からブール値に変換されており、その時点で型をチェックすることはできません。
この時点で、私はマングースに挿入/更新する前にタイプと値を検証することしか考えられません。
const schema = new mongoose.Schema({{
id: {
type: String,
unique: true,
required: true,
},
address: {
formatted: String,
streetAddress: String,
locality: String,
region: String,
postalCode: String,
country: String,
},
isActive: Boolean,
});
const user = mongoose.model('User', schema);
// this one work with the validation on the type
User.create({ id : 'userA' }, (err) => {
console.log(err);
});
// fail to validate the type on both findOneAndUpdate
User.update({ id:'userA'},{ $set: { address:12313 }}, { runValidators: true}, (err) => {
console.log(err);
});
しかし、ポストフックのコンテキストは、モデル自体です。クエリを取得することはできますが、マングースがスキーマ定義のデータ型に従って自動的に実行し、新しいものを作成するのと同じように動作することを期待するデータ型を手動でチェックして検証する必要があります。 その場合は、手動でデータを更新する前に、自分で検証を実行しないでください。 btw、ご協力いただきありがとうございます。 –