Relacionamentos:
- Um
one-to-one is a relationshiptal que um estado tem apenas uma capital e uma capital é a capital de apenas um estado - Um
one-to-many is a relationshiptal que uma mãe tem muitos filhos, e os filhos têm apenas uma mãe - Um
many-to-many is a relationshiptal 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);
}
});
});
}