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

Pembaruan pada Agregat di Mongodb

Saya benar-benar tidak berpikir bahwa bahkan sebagai kueri pengumpan, kerangka kerja agregasi adalah operasi yang tepat untuk digunakan di sini. Yang Anda lakukan hanyalah "mendenormalisasi" array sebagai dokumen individual. Benar-benar tidak perlu. Ambil saja dokumennya:

var query = {}; // whatever criteria

Users.find(query,"Invitation",function(err,docs) {
    if (err) {
        console.log(err);

    var results = [];        

    async.each(docs,function(doc,callback) {
        async.each(docs.Invitation,function(invite,callback) {
            Users.findOneAndUpdate(
                { "_id": doc._id, "Invitation._id": invite._id },
                { "$set": { "Invitation.$.Accepted": !invite.Accepted } },
                function(err,doc) {
                   results.push( doc );
                   callback(err);
                }
            );
        },callback);
    },function(err) {
        if (err)
            console.log(err);

        console.log(results);
    });    

});

Jadi tidak ada masalah mengulangi daftar dokumen sebagai tanggapan atas apa yang Anda lakukan, hanya saja Anda juga ingin mengulangi anggota array juga. Tangkapannya adalah ketika mengeluarkan segala jenis .update() yang perlu Anda ketahui maka panggilan asinkron selesai.

Jadi saya menggunakan async.each tetapi Anda mungkin ingin async.eachLimit untuk mengontrol perulangan. Pencocokan elemen berasal dari posisi $ operator, sesuai dengan elemen larik yang cocok dalam kueri.

Ini hanya kode JavaScript, jadi cukup "alihkan" nilainya dengan !invite.accepted yang akan membalikkannya. Untuk kesenangan tambahan, kembalikan larik "hasil" dengan mendorong dokumen yang dimodifikasi dari .findOneAndUpdate() .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Rails 4 dan mongoid:secara terprogram membuat kueri dengan beberapa kondisi AND dan OR

  2. MongoDB SpiderMonkey tidak mengerti UTF-8

  3. Hemat TimeZone dengan Tanggal di mongodb

  4. Tidak Dapat Menggunakan Kueri Ekspor Mongo

  5. Bagaimana cara mengganti NaN dengan null dari Mongo Shell?