MongoDB:嵌套值的聚合计算

夏普

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

{
  "InstanceId": "Instance1",
  "Username": "JohnSmith",
  "ProjectTotals": 
    {
      Subtotal: 100.00
      TaxTotal: 0.000
    }
}

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

我正在尝试获取一些汇总数据,以使我可以向实例管理器显示每个用户创建的项目数量以及所有项目的总成本和每个用户的平均项目成本。

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

db.projects.aggregate( 
{$match: 
    {InstanceId: "Instance1", 
     ProjectTotals:{"$exists":true}     }},
{$group:
    {_id: "$Username", 
        count: { $sum: 1 },
        total: { $sum: "ProjectTotals.SubTotal"},
        average: {$avg: "ProjectTotals.SubTotal"}}})

此查询成功为我提供了每个用户的计数,但每个用户的总数和平均值为0:

"result" : [ 
    {
        "_id" : "JohnSmith",
        "count" : 10,
        "total" : 0,
        "average" : 0
    }
]

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

约翰·彼得罗恩

您需要在ProjectTotals前面加上$并加错拼写的SubTotal(在模式中为Subtotal,但在聚合中为SubTotal)。进行两个更正:

db.projects.aggregate(
                      {$match: {InstanceId: "Instance1", ProjectTotals:{"$exists":true}}},
                      {$group: {_id: "$Username", count: { $sum: 1 },
                           total: {$sum: "$ProjectTotals.Subtotal"}, 
                                    average: {$avg: "$ProjectTotals.Subtotal"}}}
                      )

对您的示例数据运行我得到:

{ "_id" : "JohnSmith", "count" : 1, "total" : 100, "average" : 100 }

这是我希望从1的数据样本中得出的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章