Mối quan hệ:
-
one-to-one is a relationship
sao cho một bang chỉ có một thành phố đầu não và một thành phố thủ phủ là thủ phủ của một bang duy nhất -
one-to-many is a relationship
như một người mẹ có nhiều con và những đứa trẻ chỉ có một người mẹ -
many-to-many is a relationship
sao cho một cuốn sách có thể được viết bởi các tác giả chung hoặc đồng tác giả, trong khi một tác giả có thể viết một số cuốn sách.
mối quan hệ một-một - Nếu một Project/Group
bị xóa, làm cách nào để cập nhật Assignment
của tôi Lược đồ.
Thông thường, bạn sẽ có một project
được ánh xạ tới một assignment
và tương tự một assignment
được ánh xạ tới một project
. những gì bạn có thể làm ở đây là xóa một dự án và sau đó tìm project
được liên kết trong mô hình phân công và xóa các tham chiếu của chúng.
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);
}
});
});
});
}
mối quan hệ một-nhiều - Nếu một Project/Group
bị xóa, làm cách nào để cập nhật Assignment
của tôi Lược đồ.
Trong trường hợp này, chúng tôi đang xóa một dự án và sau đó tìm tất cả assignment
thuộc về project
này và xóa tham chiếu của nó khỏi chúng. Đây là tình huống, có thể có nhiều nhiệm vụ cho một dự án.
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);
}
});
});
});
}
Xóa phần mềm trung gian
Bạn có thể đạt được điều tương tự thông qua middleware
như Johnny đã chỉ ra, chỉ là một sự điều chỉnh về điều đó ..
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
Thông thường, có thể có nhiều project
thuộc về một assignment
và nhiều assignment
thuộc cùng một project
. Bạn sẽ có một assignment
trong Project
của bạn Lược đồ trong đó một dự án sẽ liên quan đến nhiều nhiệm vụ.
Lưu ý: loại bỏ phần mềm trung gian sẽ không hoạt động trên các mô hình và nó sẽ chỉ hoạt động trên tài liệu của bạn. Nếu bạn đang sử dụng remove
phần mềm trung gian đảm bảo trong chức năng xóa của bạn, bạn tìm thấy project
theo id đầu tiên và sau đó trên document
được trả về áp dụng phương pháp loại bỏ, vì vậy để ở trên hoạt động ... chức năng xóa của bạn sẽ giống như thế này.
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}