首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongodb群在词典中的应用

Mongodb群在词典中的应用
EN

Stack Overflow用户
提问于 2018-12-09 13:47:42
回答 1查看 681关注 0票数 2

我收藏了一些文件,如:文档1:

代码语言:javascript
复制
{
 "company": "ABC"
 "application": {
    "app-1": {"earning_from_src_A": 50,
              "earning_from_src_B": 43},
    "app-2": {"earning_from_src_A": 10,
              "earning_from_src_B": 13}
 }
}    

文件2:

代码语言:javascript
复制
{
 "company": "ABCD"
 "application": {
    "app-1": {"earning_from_src_A": 150,
              "earning_from_src_B": 413},
    "app-2": {"earning_from_src_A": 110,
              "earning_from_src_B": 113},
    "app-3": {"earning_from_src_A": 1,
              "earning_from_src_B": 34},
 }
} 

我想得到所有的申请和收集文件。类似:结果:

代码语言:javascript
复制
{
 "app-1": {"earning_from_src_A": 200,
           "earning_from_src_B": 456},
 "app-2": {"earning_from_src_A": 120,
           "earning_from_src_B": 126},
 "app-3": {"earning_from_src_A": 1,
           "earning_from_src_B": 34},
}

有人能帮我吗?

我试过使用聚合函数,但无法对集合进行分组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-09 14:13:31

您可以使用下面的聚合

所以基本上你的钥匙在这里是未知的。因此,您必须使用$objectToArray聚合将它们转换为键值对。然后,您可以轻松地使用应用程序名称$group他们,并计数那里从AB的收入。

代码语言:javascript
复制
db.collection.aggregate([
  { "$addFields": {
    "application": { "$objectToArray": "$application" }
  }},
  { "$unwind": "$application" },
  { "$group": {
    "_id": "$application.k",
    "earning_from_src_A": {
      "$sum": "$application.v.earning_from_src_A"
    },
    "earning_from_src_B": {
      "$sum": "$application.v.earning_from_src_B"
    }
  }},
  { "$group": {
    "_id": null,
    "data": {
      "$push": {
        "k": "$_id",
        "v": {
          "earning_from_src_A": "$earning_from_src_A",
          "earning_from_src_B": "$earning_from_src_B"
        }
      }
    }
  }},
  { "$replaceRoot": { "newRoot": { "$arrayToObject": "$data" }}}
])

哪个outputs

代码语言:javascript
复制
[
  {
    "app-1": {
      "earning_from_src_A": 200,
      "earning_from_src_B": 456
    },
    "app-2": {
      "earning_from_src_A": 120,
      "earning_from_src_B": 126
    },
    "app-3": {
      "earning_from_src_A": 1,
      "earning_from_src_B": 34
    }
  }
]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53692989

复制
相关文章

相似问题

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