Relaciones:
- Un
one-to-one is a relationshiptal que un estado tiene solo una ciudad capital y una ciudad capital es la capital de un solo estado - Un
one-to-many is a relationshiptal que una madre tiene muchos hijos, y los hijos tienen una sola madre - Un
many-to-many is a relationshiptal que un libro puede ser escrito por varios autores o coautores, mientras que un autor puede escribir varios libros.
relación uno a uno - Si un Project/Group se elimina, ¿cómo puedo actualizar mi Assignment? Esquema.
Por lo general, tendrá un project asignado a una assignment y de manera similar una assignment asignado a un project . lo que puede hacer aquí es eliminar un proyecto y luego encontrar el project asociado en el modelo de asignación y eliminar sus referencias.
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);
}
});
});
});
}
relación uno-muchos - Si un Project/Group se elimina, ¿cómo puedo actualizar mi Assignment? Esquema.
En este escenario, estamos eliminando un proyecto y luego buscando todas las assignments que pertenece a este project y eliminando su referencia de ellos. Aquí la situación es que puede haber muchas asignaciones para un solo proyecto.
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);
}
});
});
});
}
Eliminar el software intermedio
Podría lograr lo mismo a través de middleware como señaló Johnny, solo una corrección sobre eso...
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
Por lo general, puede haber muchos projects perteneciente a una assignment y muchas assignments pertenecientes al mismo project . Tendrás una assignment columna en su Project Esquema donde un proyecto se relacionará con múltiples asignaciones.
remove middleware asegúrese de que en su función de eliminación, encuentre project por id primero y luego en el document devuelto aplique el método de eliminación, por lo que para que funcione lo anterior... su función de eliminación se vería así.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}