Relacje:
one-to-one is a relationshiptak, że państwo ma tylko jedną stolicę, a stolica jest stolicą tylko jednego państwaone-to-many is a relationshiptak, że matka ma wiele dzieci, a dzieci mają tylko jedną matkęmany-to-many is a relationshiptak, że książka może być napisana przez kilku autorów lub współautorów, podczas gdy autor może napisać kilka książek.
relacja jeden-jeden — Jeśli Project/Group został usunięty, jak mogę zaktualizować moje Assignment Schemat.
Zazwyczaj będziesz mieć jeden project mapowane do jednego assignment i podobnie jedno Assignment mapowane do jednego project . możesz tutaj usunąć projekt, a następnie znaleźć powiązany project w modelu przydziału i usuń ich referencje.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
Assignment.update({_id: project.assignment}},
{$pull: {projects: project._id}},
function (err, numberAffected) {
console.log(numberAffected);
} else {
console.log(err);
}
});
});
});
}
relacja jeden-wiele — Jeśli Project/Group został usunięty, jak mogę zaktualizować moje Assignment Schemat.
W tym scenariuszu usuwamy projekt, a następnie znajdujemy wszystkie assignment który należy do tego project i usuwając z nich swoje odniesienie. Oto sytuacja, w której może być wiele zadań dla jednego projektu.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
Assignment.update({_id: {$in: project.assingments}},
{$pull: {project: project._id}},
function (err, numberAffected) {
console.log(numberAffected);
} else {
console.log(err);
}
});
});
});
}
Usuń oprogramowanie pośredniczące
Możesz osiągnąć to samo za pomocą middleware jak zauważył Johnny, tylko korekta tego...
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
Zazwyczaj może być wiele projects należące do assignment i wiele assignments należące do tego samego project . Będziesz mieć Assignment kolumna w Twoim Project Schemat, w którym jeden projekt będzie powiązany z wieloma zadaniami.
Uwaga: usuń oprogramowanie pośredniczące nie będzie działać na modelach i będzie działać tylko na twoich dokumentach. Jeśli wybierasz się z remove oprogramowanie pośredniczące zapewnia, że w funkcji usuwania znajdziesz project najpierw przez id, a następnie na zwróconym document zastosuj metodę usuwania, aby powyższe zadziałało... Twoja funkcja usuwania będzie wyglądać tak.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}