Supprimer automatiquement le référencement des objets sur la suppression de MongoDB
Supposons que j'ai un schéma comme ceci:
var Person = new Schema({
name: String
});
var Assignment = new Schema({
name: String,
person: ObjectID
});
Si je supprime une personne, il peut toujours être des orphelins attributions de gauche qui font référence à une personne qui n'existe pas, ce qui crée des étrangers de désordre dans la base de données.
Est-il un moyen simple de s'assurer que, lorsqu'une personne est supprimée, toutes les références correspondantes à cette personne sera également supprimé?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ajouter vos propres
'remove'
Mangouste middleware sur lePerson
schéma pour supprimer cette personne de tous les autres documents qui font référence à elle. Dans votre middleware de fonction,this
est lePerson
document qui est en cours de suppression.data:{persons:[{ObjectID}]}
?post remove hooks
au lieu depre remove hooks
pour gérer cela (comme expliqué dans ma réponse à cette question) ?Si par "simple" tu veux dire "built-in", alors non. MongoDB est pas une base de données relationnelle, après tout. Vous devez mettre en place votre propre système de nettoyage.
La
remove()
méthode est obsolète.Donc, à l'aide de "supprimer" dans votre Mangouste middleware est probablement pas la meilleure pratique plus.
La mangouste a créé des mises à jour pour fournir crochets pour
deleteMany()
etdeleteOne()
.Vous pouvez à la place.
remove
est obsolète, pourquoi êtes-vous de l'utiliser pour supprimer les Attributions? Aussi, ledeleteMany
crochet être appelée que si une seule personne est retiré?deleteMany
est toujours appelée lorsquedeleteMany
est exécuté mais pas lorsqu'une seule personne est enlevée par le biais de toute autre fonction telle quedeleteOne
. Merci pour la scolarisation moi! 🙂vous pouvez utiliser le soft supprimer. Ne pas supprimer la personne de la Personne de la Collection au lieu d'utiliser isDelete indicateur booléen à true.
isDeleted
champDans le cas où si quelqu'un à la recherche pour le pré crochet, mais pour
deleteOne
etdeleteMany
fonctions c'est une solution qui fonctionne pour moi:Invoquant
deleteOne
fonction quelque part dans le service: