Jesteś na dobrej drodze, aby użyć 'remove'
oprogramowanie pośredniczące do tego. W funkcji oprogramowania pośredniego this
czy instancja grupy jest usuwana i możesz uzyskać dostęp do innych modeli poprzez jej model
metoda. Możesz więc zrobić coś takiego:
GroupSchema.pre('remove', function(next){
this.model('User').update(
{_id: {$in: this.users}},
{$pull: {groups: this._id}},
{multi: true},
next
);
});
Lub jeśli chcesz wspierać przypadki, w których users
pole w instancji grupy może być niekompletne, co możesz zrobić:
GroupSchema.pre('remove', function(next){
this.model('User').update(
{groups: this._id},
{$pull: {groups: this._id}},
{multi: true},
next
);
});
Ale jak zauważa WiredPrairie, dla tej opcji potrzebujesz indeksu na groups
dla dobrej wydajności.