zależności:
one-to-one is a relationship
takie, że państwo ma tylko jeden stolicę a stolica to stolica tylko jeden stan
- A
one-to-many is a relationship
taki, że matka ma wiele dzieci , a dzieci mają tylko jedną matkę, 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 o numerach .
jeden-jeden związek - Jeśli Project/Group
jest usuwany, w jaki sposób mogę zaktualizować Assignment
schematu.
Zazwyczaj trzeba będzie jeden project
odwzorowane na jednym assignment
i podobnie jednej assignment
odwzorowywane na jeden project
. możesz tutaj usunąć projekt, a następnie znaleźć skojarzony model project
w modelu przypisania i usunąć ich odniesienia.
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);
}
});
});
});
}
jeden-wielu - Jeśli Project/Group
jest usuwany, w jaki sposób mogę zaktualizować Assignment
schematu.
W tym scenariuszu usuwamy projekt, a następnie znajdujemy cały obiekt assignments
należący do tego project
i usuwamy z niego jego odniesienie. Tutaj sytuacja jest taka, że może być wiele zadań dla pojedynczego 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ń middleware
Można osiągnąć to samo poprzez middleware
jak podkreślił Johnny, tylko korekty na tym ..
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
Zazwyczaj nie może być wiele projects
przynależności do assignment
i wielu assignments
należących do tego samego project
. Będziesz mieć kolumnę assignment
w swoim schemacie Project
, gdzie jeden projekt będzie odnosić się do wielu przydziałów.
Uwaga: oprogramowanie pośredniczące do usuwania oprogramowania nie działa na modelach i działałoby tylko na dokumentach. Jeśli korzystasz z oprogramowania pośredniego remove
w swojej funkcji usuwania, najpierw znajdziesz project
według ID, a następnie na zwróconym document
zastosuj metodę usuwania, więc aby powyższe działało ... Twoja funkcja usuwania wyglądałaby tak.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}