MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Rimozione da molti a molti riferimenti in Mongoose

Sei sulla strada giusta per utilizzare 'remove' middleware per questo. Nella funzione middleware, this è l'istanza del gruppo che viene rimossa e puoi accedere agli altri modelli tramite il suo model metodo. Quindi puoi fare qualcosa come:

GroupSchema.pre('remove', function(next){
    this.model('User').update(
        {_id: {$in: this.users}}, 
        {$pull: {groups: this._id}}, 
        {multi: true},
        next
    );
});

O se vuoi supportare i casi in cui gli users campo nella tua istanza di gruppo potrebbe non essere completo potresti fare:

GroupSchema.pre('remove', function(next){
    this.model('User').update(
        {groups: this._id}, 
        {$pull: {groups: this._id}}, 
        {multi: true},
        next
    );
});

Ma come osserva WiredPrairie, per questa opzione vorresti un indice su groups per buone prestazioni.