首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MongoDB:嵌套值的聚合计算

MongoDB:嵌套值的聚合计算
EN

Stack Overflow用户
提问于 2014-06-03 00:03:43
回答 1查看 161关注 0票数 0

我有一个MongoDB集合,其中包含与用户项目相对应的文档,并包含以下相关元素:

代码语言:javascript
代码运行次数:0
运行
复制
{
  "InstanceId": "Instance1",
  "Username": "JohnSmith",
  "ProjectTotals": 
    {
      Subtotal: 100.00
      TaxTotal: 0.000
    }
}

每个实例包含许多用户,每个用户可以有许多项目。

我试图获取一些聚合数据,以便向实例管理器显示每个用户创建的项目数量、所有项目的总成本以及每个用户的平均项目成本。

到目前为止,我已经构建了以下查询(目前忽略了税收):

代码语言:javascript
代码运行次数:0
运行
复制
db.projects.aggregate( 
{$match: 
    {InstanceId: "Instance1", 
     ProjectTotals:{"$exists":true}     }},
{$group:
    {_id: "$Username", 
        count: { $sum: 1 },
        total: { $sum: "ProjectTotals.SubTotal"},
        average: {$avg: "ProjectTotals.SubTotal"}}})

这个查询成功地给出了每个用户的计数,但是每个用户的总数和平均值为0:

代码语言:javascript
代码运行次数:0
运行
复制
"result" : [ 
    {
        "_id" : "JohnSmith",
        "count" : 10,
        "total" : 0,
        "average" : 0
    }
]

在不更改数据库架构的情况下,如何访问聚合函数的ProjectTotals.SubTotal?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-03 00:15:25

在ProjectTotals前面需要$加上拼写错误的SubTotal (它在模式中是小计,而在聚合中是Subtotal )。作出这两项更正:

代码语言:javascript
代码运行次数:0
运行
复制
db.projects.aggregate(
                      {$match: {InstanceId: "Instance1", ProjectTotals:{"$exists":true}}},
                      {$group: {_id: "$Username", count: { $sum: 1 },
                           total: {$sum: "$ProjectTotals.Subtotal"}, 
                                    average: {$avg: "$ProjectTotals.Subtotal"}}}
                      )

根据我得到的示例数据运行该数据:

代码语言:javascript
代码运行次数:0
运行
复制
{ "_id" : "JohnSmith", "count" : 1, "total" : 100, "average" : 100 }

这就是我对数据样本1的期望。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24005173

复制
相关文章

相似问题

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