1
MongooseまたはプレーンなMongoDBドライバを使用すると、フィールドが最初に設定された後にフィールドが更新されないようにロックする方法はありますか?初期設定後にフィールドが更新されないようにする
MongooseまたはプレーンなMongoDBドライバを使用すると、フィールドが最初に設定された後にフィールドが更新されないようにロックする方法はありますか?初期設定後にフィールドが更新されないようにする
回答者@eagor here。
私は(唯一の最初の時に保存)フック保存スキーマの前に_createdOn
を設定することにより、この効果を達成:
schema.pre('save', function(next) {
if (!this._createdOn) {
this._createdOn = new Date();
}
next();
});
...とどこからでも変更を許可しない:
userSchema.pre('validate', function(next) {
if (self.isModified('_createdOn')) {
self.invalidate('_createdOn');
}
});
なぜすることができますそのプロパティを上書きしていないだけですか? –
ビジネスロジックは、最初の値が正しいと判断します。その値に対する変更はすべて無視されます。文書内の他のフィールドを更新することはできますが、特定のフィールドだけを更新することはできません。結局のところ、_idフィールドのようなものです。 –
あなたが書いているソフトウェア全体で決してそれを変更しないでください? (あなたは更新演算子をラップするテストでこのビジネスロジックを保証することもできます)また、更新演算子を常に使用していてブランケット文書置換をしない場合(あなたはすべきではありません)、あなたはうまくいくでしょう。 –