Você está no caminho certo para usar
'remove'
middleware para isso. Na função de middleware, this
é a instância do grupo que está sendo removida e você pode acessar os outros modelos por meio de seu model
método. Então você pode fazer algo como:GroupSchema.pre('remove', function(next){
this.model('User').update(
{_id: {$in: this.users}},
{$pull: {groups: this._id}},
{multi: true},
next
);
});
Ou se você deseja oferecer suporte a casos em que os
users
campo em sua instância de grupo pode não estar completo, você pode fazer:GroupSchema.pre('remove', function(next){
this.model('User').update(
{groups: this._id},
{$pull: {groups: this._id}},
{multi: true},
next
);
});
Mas, como observa o WiredPrairie, para esta opção, você deseja um índice em
groups
para um bom desempenho.