MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Menghapus referensi satu-satu dan satu-banyak - Mongoose

Hubungan:

  1. Sebuah one-to-one is a relationship sedemikian rupa sehingga negara bagian hanya memiliki satu ibu kota dan ibu kota adalah ibu kota hanya satu negara bagian
  2. A one-to-many is a relationship sehingga seorang ibu memiliki banyak anak, dan anak-anak hanya memiliki satu ibu
  3. A many-to-many is a relationship sedemikian rupa sehingga sebuah buku dapat ditulis oleh beberapa penulis atau rekan penulis, sedangkan seorang penulis dapat menulis beberapa buku.

hubungan satu-satu - Jika Project/Group dihapus, bagaimana saya bisa memperbarui Assignment saya Skema.

Biasanya Anda akan memiliki satu project dipetakan ke satu assignment dan juga satu assignment dipetakan ke satu project . apa yang dapat Anda lakukan di sini adalah menghapus sebuah proyek dan kemudian menemukan project yang terkait dalam model penugasan dan hapus referensinya.

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);                                      
                    }
                  });
            });
        });
}

hubungan satu-banyak - Jika Project/Group dihapus, bagaimana saya bisa memperbarui Assignment saya Skema.

Dalam skenario ini kami menghapus proyek dan kemudian menemukan semua assignment yang termasuk dalam project ini dan menghapus referensinya dari mereka. Di sini situasinya, mungkin ada banyak tugas untuk satu proyek.

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);                                      
                    }
                  });
            });
        });
}

Hapus middleware

Anda dapat mencapai hal yang sama melalui middleware seperti yang ditunjukkan oleh Johnny, hanya koreksi itu..

ProjectSchema.pre('remove', function (next) {
    var project = this;
    project.model('Assignment').update(
        { projects: {$in: project.assignments}}, 
        { $pull: { project: project._id } }, 
        { multi: true }, 
        next
     );
});

Biasanya ada banyak project milik assignment dan banyak assignment milik project yang sama . Anda akan memiliki assignment kolom di Project . Anda Skema di mana satu proyek akan berhubungan dengan beberapa tugas.

Catatan: hapus middleware tidak akan berfungsi pada model dan itu hanya akan berfungsi pada dokumen Anda. Jika Anda menggunakan remove middleware memastikan dalam fungsi hapus Anda, Anda menemukan project dengan id terlebih dahulu dan kemudian pada document yang dikembalikan terapkan metode hapus, jadi agar cara di atas berfungsi... fungsi hapus Anda akan terlihat seperti ini.

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. Bagaimana cara mendapatkan banyak dokumen menggunakan array id MongoDb?

  2. Halaman Meteor Menyegarkan dengan Klik Tombol

  3. Argumen yang diteruskan harus berupa string 24 karakter hex - saya pikir itu

  4. Cara menggabungkan bidang array dalam dokumen dalam agregasi Mongo

  5. MongoDB tidak akan mulai setelah server crash