Relaciones:
- Un
one-to-one is a relationship
tal 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 relationship
tal que una madre tiene muchos hijos, y los hijos tienen una sola madre - Un
many-to-many is a relationship
tal 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);
}
});
});
}