MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Suppression de la référence plusieurs à plusieurs dans Mongoose

Vous êtes sur la bonne voie pour utiliser 'remove' middleware pour cela. Dans la fonction middleware, this est l'instance de groupe en cours de suppression et vous pouvez accéder aux autres modèles via son model méthode. Vous pouvez donc faire quelque chose comme :

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

Ou si vous souhaitez prendre en charge les cas où les users le champ de votre instance de groupe n'est peut-être pas complet, vous pouvez :

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

Mais comme le note WiredPrairie, pour cette option, vous voudriez un index sur les groups pour de bonnes performances.