Relacionamentos:
- Um
one-to-one is a relationship
tal que um estado tem apenas uma capital e uma capital é a capital de apenas um estado - Um
one-to-many is a relationship
tal que uma mãe tem muitos filhos, e os filhos têm apenas uma mãe - Um
many-to-many is a relationship
tal que um livro pode ser escrito por vários autores ou coautores, enquanto um autor pode escrever vários livros.
relacionamento um-um - Se um
Project/Group
for removido, como posso atualizar minha Assignment
Esquema. Normalmente você terá um
project
mapeado para uma assignment
e da mesma forma uma assignment
mapeado para um project
. o que você pode fazer aqui é remover um projeto e encontrar o project
associado no modelo de atribuição e remova suas referências. 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);
}
});
});
});
}
relacionamento um-muitos - Se um
Project/Group
for removido, como posso atualizar minha Assignment
Esquema. Neste cenário, estamos removendo um projeto e, em seguida, localizando todas as
assignments
que pertence a este project
e removendo sua referência deles. Aqui a situação é, pode haver muitas atribuições para um único projeto. 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);
}
});
});
});
}
Remover middleware
Você pode conseguir a mesma coisa via
middleware
como apontado por Johnny, apenas uma correção sobre isso .. ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
Normalmente pode haver muitos
projects
pertencente a uma assignment
e muitas assignments
pertencente ao mesmo project
. Você terá uma assignment
coluna em seu Project
Esquema em que um projeto se relacionará com várias atribuições. Observação: remover middleware não funcionará em modelos e funcionaria apenas em seus documentos. Se você estiver usando
remove
middleware assegure-se de que em sua função de exclusão, você encontre project
por id primeiro e depois no document
retornado aplique o método remove, então para que o acima funcione... sua função delete ficaria assim. delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}