Relacje:
one-to-one is a relationship
tak, że państwo ma tylko jedną stolicę, a stolica jest stolicą tylko jednego państwaone-to-many is a relationship
tak, że matka ma wiele dzieci, a dzieci mają tylko jedną matkęmany-to-many is a relationship
tak, ż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);
}
});
});
}