MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Removendo muitas para muitas referências no Mongoose


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.