我有一个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以进行聚合功能?
答案 0 :(得分:2)
你需要在ProjectTotals前加上$加上拼写错误的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的数据样本中得到什么。