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

Masalah Agregat &Pengelompokan MongoDB di MeteorJS

Jika Anda menggunakan agregat peretasan meteor paket untuk mengimplementasikan .aggregate() perintah pada koleksi Anda, maka itu hanya akan mengembalikan array sebagai tanggapan. Jadi, Anda perlu mengolahnya menjadi bentuk koleksi yang diterbitkan:

Meteor.publish("completedLB,function() {
    var self = this;

    var results = userCompleted.aggregate([
        { "$match": { "progressState": true } },
        { "$group": {
            "_id": "$userId",
             "progressState": { "$first": "$progressState" },
             "count": { "$sum": 1 }
        }},
        { "$sort": { "_id": 1 } }
    ]);

    _.each(results,function(result) {
        self.added("client_collection_name",Random.id(), {
            userId: result._id,
            progressState: result.progressState,
            count: result.count
        });
    });
    self.ready();
});

Atau untuk menyertakan false dihitung seperti yang disarankan oleh output yang Anda sarankan:

        { "$group": {
            "_id": "$userId",
             "progressState": { "$first": true },
             "count": { "$sum": { "$cond": ["$progressState", 1,0] }
        }},
        { "$sort": { "_id": 1 } }

Sebagai saluran dengan $cond evaluasi untuk mengkonversi ke numerik.

Di mana dalam agregasi dasar Anda hanya "menjumlahkan" hasil yang cocok dan tentu saja $sort merujuk ke bidang yang ada di output, yang dengan contoh Anda akan menjadi nilai "userId" sekarang di _id kunci dari agregasi, tetapi juga bisa "dihitung" untuk dipesan dengan jumlah total jika diinginkan.

Bagian itu menghasilkan kesalahan, sebagai $sort adalah bidang sekarang dan bukan nilai bidang dengan $ notasi.

Tetapi tentu saja untuk menerbitkan sebagai koleksi yang dapat diakses klien, Anda perlu mengganti _id actual yang sebenarnya dengan sesuatu yang diharapkan. Jadi pembuatan id acak berfungsi di sini, seperti halnya penyertaan bidang lainnya.

Untuk sedikit lebih detail, dan juga alternatif untuk paket "peretasan" yang hanya berfungsi dengan instalasi vanilla, ada juga jawaban ini sendiri yang memiliki daftar lengkap sebagai contoh.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pencarian Teks MongoDB DAN beberapa kata pencarian

  2. MongoCollection::aggregate() tidak terdefinisi di Heroku PHP menggunakan MongoHQ

  3. MongoDB tertanam di java

  4. Mengekstrak, memodelkan, dan mengubah model data, dengan mongoid/mongodb

  5. pymongo - bagaimana cara mencocokkan pada pencarian?