sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb, $sum med betingelse

Fra Mongo-dokumentationen $sum adfærd

vi kan $push alt areal og længde til array, og sammenlign count med længden af ​​array

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

eller vi kan tælle antallet af defined længde og areal sammen med samlet count , hvis tæller matcher, så er alle tal ellers nogle udefinerede.

For strengt at kontrollere typen, hvis areal og længde kan indeholde ikke-numeriske data i stedet for undefined vi kan lave $type tjek

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()
 

output

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



  1. MongoDB projicerer dokumenterne med et antal større end 2

  2. MongoDB - undslippe anførselstegn, mens posten indsættes

  3. WSO2 DSS-understøttelse til mongodb 3.x.x

  4. Hvordan læser man samlingen i bidder med 1000?