46

次のようなスキーマがあるとします。

var Person = new Schema({
    name: String
});

var Assignment = new Schema({
    name: String,
    person: ObjectID
});

個人を削除しても、存在しない個人を参照する孤立した割り当てが残っている可能性があり、データベースに余分な混乱が生じます。

人が削除されたときに、その人に対応するすべての参照も削除されるようにする簡単な方法はありますか?

4

7 に答える 7

45

'remove'独自のMongooseミドルウェアをスキーマに追加してPerson、その人物を参照する他のすべてのドキュメントからその人物を削除できます。ミドルウェア関数でthisは、Person削除されるドキュメントです。

Person.pre('remove', function(next) {
    // Remove all the assignment docs that reference the removed person.
    this.model('Assignment').remove({ person: this._id }, next);
});
于 2012-08-10T15:48:31.150 に答える
16

「シンプル」が「組み込み」を意味する場合は、いいえ。結局、MongoDB はリレーショナル データベースではありません。独自のクリーニング メカニズムを実装する必要があります。

于 2012-08-10T15:05:01.733 に答える
2

論理的な削除を使用できます。Person Collection から person を削除しないでください。代わりに isDelete boolean フラグを true に使用してください。

于 2017-09-21T06:14:31.507 に答える