MongoDB 怎么统计大类下的子类的数据?

现在有一个列表,数据结构大概是这样的,父id可能为null,现在实现的只是按typeid 聚合统计金额,

{
  title:'这是子类',
  money:50,
  typeId:xxx,
  typePid:xxx
},
{
  title:'这是子类',
  money:50,
  typeId:xxx,
  typePid:xxx
}
{
  title:'这是大类',
  money:50,
  typeId:xxx,
  typePid:null
}

想把子类也统计对应的大类里。想了好几天。。实在想不出, 怎么实现把子类统计进大类里,理想统计出来的结构是,就是说统计这个大类的包括子类的总金额

{
  title:'我是大类',
  total:150,
  typeId:xxx,
  child:[
     {
        title:'我是大类',
        total:50,
        typeId:xxx
      },
      {
        title:'我是子类',
        total:50,
        typeId:xxx
      },
      {
        title:'我是子类',
        total:50,
        typeId:xxx
      },
  ]
},
阅读 1.6k
2 个回答
//创建集合
const xxx = "id"
db.category.insert([
    {
        title: '这是子类',
        money: 50,
        typeId: xxx,
        typePid: xxx
    },
    {
        title: '这是子类',
        money: 50,
        typeId: xxx,
        typePid: xxx
    },
    {
        title: '这是大类',
        money: 50,
        typeId: xxx,
        typePid: null
    }
])

//聚合
db.category.aggregate([
    {
        $addFields: {
            test: { $cond: { if: { $eq: ["$typePid", null] }, then: { title: "$title" }, else: null } }
        }
    },
    {
        $group: {
            _id: "$typeId",
            title: { $mergeObjects: "$test" },
            typeId: { $first: "typeId" },
            total: { $sum: "$money" },
            child: {
                $push: {
                    title: "$title", total: "$money", typeId: "$typeId"
                }
            }
        }

    },
    {
        $addFields: {
            title: "$title.title"
        }
    },
])

结果如下:
image.png

聚合查询,但是性能不好,大数据量情况下最好少用,看看上面那位的回答

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进