MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Xóa tham chiếu một và một - nhiều - Mongoose

Mối quan hệ:

  1. 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
  2. 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ẹ
  3. 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);
             } 
           });                
    });
 }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tìm kiếm trên nhiều bộ sưu tập trong MongoDB

  2. Cách truy vấn MongoDB với like

  3. Mongo Đưa ra 'lỗi khóa trùng lặp' trên các trường không phải duy nhất

  4. Giới thiệu về Morphia - Java ODM cho MongoDB

  5. Gọi hàm bên trong tổng hợp mongodb?