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

Dapatkan jumlah loglevel untuk setiap nama

Hapus { "$sum": 1 } dan { "$sum": 0 } ekspresi dalam if/else . Anda blok kondisional, ganti dengan nilai 1 dan 0 (masing-masing untuk setiap blok kondisional).

Pipa akhir akan terlihat seperti ini, menggunakan $cond sintaks yang menghilangkan if/else blok:

db.names.aggregate([
    {
        "$group": {
            "_id": "$name",
            "error": { 
               "$sum": { 
                   "$cond": [ { "$eq": [ "$loglevel",  "ERROR" ] }, 1, 0] 
               }
           },
           "warning":{
               "$sum": { 
                   "$cond": [ { "$eq": [ "$loglevel", "WARNING" ] }, 1, 0 ]
                }
           },
           "info": { 
               "$sum": { 
                   "$cond": [ { "$eq": [ "$loglevel",  "INFO" ] }, 1, 0 ]
               }
           }
        }
    }
])

Atau buat pipeline secara dinamis, dengan kemungkinan status array:

var statuses = ["ERROR", "WARNING", "INFO"],
    groupOperator = { "$group": { "_id": "$name" } };

statuses.forEach(function (status){ 
    groupOperator["$group"][status.toLowerCase()] = { 
       "$sum": { 
           "$cond": [ { "$eq": [ "$loglevel",  status ] }, 1, 0] 
       }
   }
});

db.names.aggregate([groupOperator]);

Keluaran

/* 1 */
{
    "_id" : "t1",
    "error" : 2,
    "warning" : 3,
    "info" : 1
}

/* 2 */
{
    "_id" : "t2",
    "error" : 4,
    "warning" : 0,
    "info" : 1
}

/* 3 */
{
    "_id" : "t3",
    "error" : 0,
    "warning" : 0,
    "info" : 1
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb v3.2 tidak dapat berjalan di mac

  2. Tarik dan tambahkan keset secara bersamaan dengan mongo

  3. Masalah dengan CORS. Labu <-> AngularJS

  4. 3 Langkah Sederhana untuk Membuat Cluster Sharded MongoDB

  5. MongoDB - Argumen ke $size harus berupa Array, tetapi bertipe:EOO / hilang