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

Agregasi Mongo :$group dan $project array ke objek untuk penghitungan

Dengan MongoDb 3.4 dan yang lebih baru, Anda dapat memanfaatkan penggunaan $arrayToObject operator untuk mendapatkan hasil yang diinginkan. Anda perlu menjalankan pipa agregat berikut:

db.collection.aggregate([
    { "$group": {
        "_id": {  
            "date": "$install_date",  
            "platform": { "$toLower": "$platform" }
        },
        "count": { "$sum": 1 }
    } },
    { "$group": {
        "_id": "$_id.date",
        "counts": {
            "$push": {
                "k": "$_id.platform",
                "v": "$count"
            }
        }
    } },
    {  "$addFields": {
        "install_date": "$_id", 
        "platform": { "$arrayToObject": "$counts" }
    }  },
    { "$project": { "counts": 0, "_id": 0 } } 
])

Untuk versi yang lebih lama, manfaatkan $cond operator di $group langkah pipa untuk mengevaluasi jumlah berdasarkan nilai bidang platform, seperti berikut:

db.collection.aggregate([    
    { "$group": { 
        "_id": "$install_date",             
        "android_count": {
            "$sum": {
                "$cond": [ { "$eq": [ "$platform", "android" ] }, 1, 0 ]
            }
        },
        "ios_count": {
            "$sum": {
                "$cond": [ { "$eq": [ "$platform", "ios" ] }, 1, 0 ]
            }
        },
        "facebook_count": {
            "$sum": {
                "$cond": [ { "$eq": [ "$platform", "facebook" ] }, 1, 0 ]
            }
        },
        "kindle_count": {
            "$sum": {
                "$cond": [ { "$eq": [ "$platform", "kindle" ] }, 1, 0 ]
            }
        } 
    } },
    { "$project": {
        "_id": 0, "install_date": "$_id",            
        "platform": {
            "android": "$android_count",
            "ios": "$ios_count",
            "facebook": "$facebook_count",
            "kindle": "$kindle_count"
        }
    } }
])

Di atas, $cond mengambil kondisi logis sebagai argumen pertama (jika) dan kemudian mengembalikan argumen kedua di mana evaluasinya benar (kemudian) atau argumen ketiga di mana salah (lain). Ini membuat true/false kembali menjadi 1 dan 0 untuk diumpankan ke $sum masing-masing.

Jadi misalnya, jika { "$eq": [ "$platform", "facebook" ] }, benar maka ekspresi akan mengevaluasi ke { $sum: 1 } jika tidak maka akan menjadi { $sum: 0 }




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Membuat kueri luwak.js berjalan secara sinkron

  2. Perbarui model dengan Mongoose, Express, NodeJS

  3. Padding dalam SQL

  4. Temukan url duplikat di mongodb

  5. Bagaimana mengatur hubungan banyak ke banyak di MongoDB