sql >> データベース >  >> NoSQL >> MongoDB

各名前のログレベルのカウントを取得します

    { "$sum": 1 }を削除します および{ "$sum": 0 } if/elseの式 条件付きブロックの場合は、値1と0に置き換えます(それぞれ条件付きブロックごとに)。

    他の $cond if/elseを省略した構文 ブロック:

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

    または、可能なステータスの配列を指定して、パイプラインを動的に作成します。

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

    出力

    /* 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. エクスプレスポストリクエストでのUnhandledPromiseRejectionWarningの解決

    2. MongoDB:完全なKey:Arrayペアをプルします

    3. MongoDB $ sort

    4. 有効なオブジェクトIDのmongodbキャストの問題でエラーが発生する