首页 > 解决方案 > Mongodb Aggregation group, count and group

问题描述

$group:{
            _id:{
                status:"$dir_status", 
                directions:"$direction"
            },
            "X": {
                "$sum": { $cond: [{ "$eq": ["$dir_status", "0"] }, 1, 0] }
            },
            "Y": {
                "$sum": { $cond: [{ "$eq": ["$dir_status", "1"] }, 1, 0] }
            },
            "Z": {
                "$sum": { $cond: [{ "$eq": ["$dir_status", "2"] }, 1, 0] }
            },
            count:{$sum:1}
            } 

after an aggregation i got this output

[
      {
        _id: { level: 'd1' },
        X: 0,
        Y: 0,
        Z: 0,
        count: 3
      },
      {
        _id: { level: 'd2' },
        X: 0,
        Y: 0,
        Z: 0,
        count: 3
      },
      {
        _id: { level: 'd3' },
        X: 0,
        Y: 0,
        Z: 0,
        count: 4
      },
]

Now i want to group it as

[
 level:"$_id.level",
 range:[ { dir:"X", count:"$X"}, { dir:"Y", count:"$Y"}, { dir:"Z", count:"$Z"}]
]

i used $push method but its not working combining three objects. Help me to resolve this to get output like this

[{level:"d1", range:[{dir:"X", count:0}, {dir:"Y", count:5}]]

标签: mongodb

解决方案


推荐阅读