Взаимоотношения:
one-to-one is a relationship
така че една държава има само една столица, а столицата е столица само на една държаваone-to-many is a relationship
така, че майката има много деца, а децата имат само една майкаmany-to-many is a relationship
така че една книга може да бъде написана от няколко автори или съавтори, докато един автор може да напише няколко книги.
Връзка едно-едно - Ако е Project/Group
е премахнат, как мога да актуализирам моето Assignment
Схема.
Обикновено ще имате един project
съпоставени с едно assignment
и по подобен начин едно assignment
съпоставени с един project
. това, което можете да направите тук, е да премахнете проект и след това да намерите свързания project
в модела на присвояване и премахнете техните препратки.
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);
}
});
});
});
}
Връзка един-много - Ако е Project/Group
е премахнат, как мога да актуализирам моето Assignment
Схема.
В този сценарий премахваме проект и след това намираме всички assignments
който принадлежи към този project
и премахване на препратката от тях. Тук ситуацията е, че може да има много задачи за един проект.
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);
}
});
});
});
}
Премахнете междинния софтуер
Можете да постигнете същото чрез middleware
както посочи Джони, само корекция на това...
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
Обикновено може да има много projects
принадлежащи към assignment
и много assignments
принадлежащи към същия project
. Ще имате assignment
колона във вашия Project
Схема, при която един проект ще бъде свързан с множество задачи.
Забележка: премахване на междинен софтуер няма да работи на модели и ще работи само на вашите документи. Ако отивате с remove
Мидълуерът гарантира, че във вашата функция за изтриване ще намерите project
първо по id и след това върху върнатия document
приложете метода за премахване, така че за да работи горното... вашата функция за изтриване ще изглежда така.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}