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

MongoDB集計-フィールドとしてのプロジェクトフィールド値

    以下のように集計できます:

    • $group subject およびimportance 、それぞれのカウントを取得します。
    • 次に、トリッキーな部分、条件付きの $project importanceのオプションの数に対して直線的に増加します フィールドが保持できます。現在は3つです-highlow およびmedium
    • $group 結果はsubjectによって再び返されます $sumを使用します 演算子をaccumulate 重要度フィールドのさまざまな値のカウント。

    サンプルコード:

    db.t.aggregate([
    {$group:{"_id":{"subject":"$subject",
                    "importance":"$importance"},
             "count":{$sum:1}}},
    {$project:{"_id":0,
               "subject":"$_id.subject",
               "result":{$cond:[
                               {$eq:["$_id.importance","high"]},
                               {"high":"$count"},
                               {$cond:[{$eq:["$_id.importance","low"]},
                                       {"low":"$count"},
                                       {"medium":"$count"}]}]}}},
    {$group:{"_id":"$subject",
             "low":{$sum:"$result.low"},
             "medium":{$sum:"$result.medium"},
             "high":{$sum:"$result.high"}}},
    ])
    

    テストデータ:

    db.t.insert([
    {"subject":"history","importance":"high"},
    {"subject":"geography","importance":"low"},
    {"subject":"history","importance":"low"},
    {"subject":"history","importance":"medium"},
    {"subject":"geography","importance":"low"},
    {"subject":"history","importance":"low"}
    ])
    

    結果:

    { "_id" : "geography", "low" : 2, "medium" : 0, "high" : 0 }
    { "_id" : "history", "low" : 2, "medium" : 1, "high" : 1 }
    



    1. Mongodb:$HINTのパフォーマンスへの影響

    2. 多対多のモデリング:Mongoid/MongoDBを使用したスルー

    3. プログラムでAbstractMongoEventListenerを登録するにはどうすればよいですか?

    4. forループ(Node.JS)でコールバックを処理する方法