首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDb聚合,使用字段上的数据分组

MongoDb聚合,使用字段上的数据分组
EN

Stack Overflow用户
提问于 2022-06-06 11:22:23
回答 1查看 92关注 0票数 1

我的mongo-db中输入了以下数据:

代码语言:javascript
运行
复制
[
  {
    "year": "2022-10-01",
    "Area": "abc",
    "Engineering": 100,
    "Commerce": 20,
    "Arts": 10
  },
  {
    "year": "2022-10-01",
    "Area": "def",
    "Engineering": 90,
    "Commerce": 60,
    "Arts": 40
  },
  {
    "year": "2021-01-01",
    "Area": "abc",
    "Engineering": 70,
    "Commerce": 30,
    "Arts": 90
  },
  {
    "year": "2022-01-01",
    "Area": "def",
    "Engineering": 100,
    "Commerce": 10,
    "Arts": 50
  }
]

根据每个地区的最终结果,有几年的记录将以这种形式进行,首先按日期分组,然后在每个部门的每个区域和范围内按区域分组。

结果:

代码语言:javascript
运行
复制
{
  "2022-10-01": {
    "abc": {
      "Engineering": "<total engineering count>",
      "Commerce": "<total commerce count>",
      "Arts": "<total arts count>"
    },
    "def": {
      "Engineering": "<total engineering count>",
      "Commerce": "<total commerce count>",
      "Arts": "<total arts count>"
    }
  },
  "2021-01-01": {
    "abc": {
      "Engineering": "<total engineering count>",
      "Commerce": "<total commerce count>",
      "Arts": "<total arts count>"
    },
    "def": {
      "Engineering": "<total engineering count>",
      "Commerce": "<total commerce count>",
      "Arts": "<total arts count>"
    }
  }
}
EN

回答 1

Stack Overflow用户

发布于 2022-06-06 12:29:45

查询

  • year,area分组并与计数相加
  • 只按年分组,并将文档收集到数组中。
  • 查询已经完成,但仍然是将数据放在字段place 2x (year+area)中的转换,并将所有数据合并为1个文档。
  • 嵌套区域和外部年份的$arrayToObject 2倍
  • 将-root替换为该文档
  • 组将全部放在一个文档中。
  • 用该文档替换根目录

*字段上的数据使mongodb中的事情变得很困难,如果没有它们,查询将仅仅是前两个简单组

花花果

代码语言:javascript
运行
复制
aggregate(
[{"$group": 
   {"_id": {"year": "$year", "Area": "$Area"},
    "Engineering": {"$sum": "$Engineering"},
    "Commerce": {"$sum": "$Commerce"},
    "Arts": {"$sum": "$Arts"}}},
 {"$group": 
   {"_id": "$_id.year",
    "docs": 
     {"$push": 
       {"k": "$_id.Area",
        "v": 
         {"Engineering": "$Engineering",
          "Commerce": "$Commerce",
          "Arts": "$Arts"}}}}},
 {"$replaceRoot": 
   {"newRoot": 
     {"$arrayToObject": 
       [[{"k": "$_id", "v": {"$arrayToObject": ["$docs"]}}]]}}},
 {"$group": {"_id": null, "docs": {"$mergeObjects": "$$ROOT"}}},
 {"$replaceRoot": {"newRoot": "$docs"}}])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72516932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档