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

Mongodb、条件付きの$ sum

    Mongoドキュメントから $sumの動作

    $pushできます すべての面積と長さを配列し、countを比較します 配列の長さで

    db.n.aggregate(

        [ 
            {
                $group: {
                    _id: { name: "$name" }, 
                    count: { $sum: 1 }, 
                    area : {$push : "$area"}, 
                    length : {$push : "$length"} } 
            },
            {
                $project:{
                    _id: "$_id",
                    count: "$count",
                    summarizedLength: { $cond : [ {$eq : [ "$count", {$size : "$length"} ]} , { $sum : ["$length"] }, "not all numbers" ] },
                    summarizedArea: { $cond : [ {$eq : [ "$count", {$size : "$area"} ]} , { $sum : ["$area"] }, "not all numbers" ] },
                }
            }
        ] 
    )
    

    または、definedの数を数えることができます 長さと面積、および合計count 、カウントが一致する場合、それ以外のすべての数値は未定義です。

    面積と長さがundefinedではなく、数値以外のデータを含む可能性がある場合に、タイプを厳密にチェックするため $typeを実行できます チェック

    db.n.aggregate(
        [
            {
                $group: {
                    _id: { name: "$name" },
                    count: { $sum: 1 },
                    areaCount : { $sum : { $cond : [ {$eq : [ "$area", undefined ]} , 0, 1 ] } },
                    lengthCount : { $sum : { $cond : [ {$eq : [ "$length", undefined ]} , 0, 1 ] } },
                    summarizedLength: { $sum: "$length"  },
                    summarizedArea: { $sum: "$area"  }
                }
            },
            {
                $project : {
                    _id : "$_id",
                    count: "$count",
                    summarizedLength: { $cond : [ {$eq : [ "$count", "$lengthCount" ]} , "$summarizedLength", "not all numbers" ] },
                    summarizedArea: { $cond : [ {$eq : [ "$count", "$areaCount" ]} , "$summarizedArea", "not all numbers" ] },
                }
            }
        ]
    ).pretty()
    

    出力

    {
        "_id" : {
            "name" : "abc"
        },
        "count" : 2,
        "summarizedLength" : 30,
        "summarizedArea" : "not all numbers"
    }
    



    1. 書き込みをスケーリングする方法としてのコンシステントハッシュ

    2. マングースの場所、mongoDB

    3. 1つのURLでマラソン(mesos)でredisを実行します

    4. マングースはデータベースの最後の10エントリを検索します