MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Nhận số lượng loglevel cho mỗi tên

Xóa { "$sum": 1 }{ "$sum": 0 } biểu thức trong if/else của bạn các khối điều kiện, hãy thay thế chúng bằng các giá trị 1 và 0 (tương ứng cho mỗi khối điều kiện).

Đường dẫn cuối cùng sẽ trông giống như thế này, sử dụng $cond cú pháp bỏ qua if/else khối:

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

Hoặc tạo động đường ống, với một loạt các trạng thái có thể có:

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

Đầu ra

/* 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. Tùy chọn cấu hình --bindip trong mongodb làm gì?

  2. Gặp sự cố khi tách và đếm dữ liệu trong CSV trong MONGODB (Có giá trị Null trong các cột như tên column :)

  3. Cập nhật Mongodb với upert không thành công

  4. Meteor Subscribe không cập nhật thứ tự sắp xếp của bộ sưu tập

  5. Nhóm và đếm theo tháng