Отношения:
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
по идентификатору, а затем к возвращенному document
примените метод удаления, поэтому для того, чтобы вышеизложенное сработало... ваша функция удаления будет выглядеть так.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}
23.09.2015