无法从MongoDB聚合检索$sum
在下面的查询中,我成功地获得了所有贡献数组的总长度,但我还尝试将这些数组中每个对象的贡献\收据\金额字段与其当前返回的零相加。我做错了什么无法从MongoDB聚合检索$sum,mongodb,Mongodb,在下面的查询中,我成功地获得了所有贡献数组的总长度,但我还尝试将这些数组中每个对象的贡献\收据\金额字段与其当前返回的零相加。我做错了什么 doc.aggregate( [ { $unwind: '$contributions' }, { $group: { _id: candidate.candidate_id, contributions: { $sum:
doc.aggregate(
[
{ $unwind: '$contributions' },
{
$group: {
_id: candidate.candidate_id,
contributions: { $sum: 1 },
total: { $sum: '$contribution_receipt_amount' }
}
}
],
{ allowDiskUse: true }
)
该文档如下所示:
{
"_id" : "2015-05-31",
"contributions" : [
{
"entity_type_desc" : "INDIVIDUAL",
"contribution_receipt_amount" : 109.2,
},
{
"entity_type_desc" : "INDIVIDUAL",
"contribution_receipt_amount" : 105,
}
]
},
{
...
}
[ { _id: 'P60008885', contributions: 2, total: 0 } ]
我的输出如下所示:
{
"_id" : "2015-05-31",
"contributions" : [
{
"entity_type_desc" : "INDIVIDUAL",
"contribution_receipt_amount" : 109.2,
},
{
"entity_type_desc" : "INDIVIDUAL",
"contribution_receipt_amount" : 105,
}
]
},
{
...
}
[ { _id: 'P60008885', contributions: 2, total: 0 } ]
此处的捕获是“供款\收据\金额”字段,它是“供款”文档的子项。因此,你应该参考。访问子文档元素的符号
"contributions" : {
"entity_type_desc" : "INDIVIDUAL",
"contribution_receipt_amount" : 109.2
}
这是更新后的查询
doc.aggregate(
[
{ $unwind: '$contributions' },
{
$group: {
_id: candidate.candidate_id,
contributions: { $sum: 1 },
total: { $sum: '$contributions.contribution_receipt_amount' }
}
}
],
{ allowDiskUse: true }
)
正如尼尔建议的那样
doc.aggregate(
[
{
$group: {
_id: candidate.candidate_id,
contributions: { $sum: 1 },
total: { $sum: {$sum: "$contributions.contribution_receipt_amount"} }
}
}
],
{ allowDiskUse: true }
)
不知道。实际产量是多少?0还是空?捐款金额很可能是字符串而不是数字。显示输出和您希望实际显示此值的文档。@NeilLunn我刚刚用输出和文档编辑了帖子。或者,合计:{$sum:{$sum:{'$contributions.contribution\u receipt\u amount'}.1$sum用于添加数组,1$sum用于分组。您不需要$unwind。另外allowDiskUse:true是一种攻击。如果您看到消息,您可能会犯其他错误,应该予以纠正。@NeilLunn我没有得到allowDiskUse:true部分。请您详细说明一下,好吗?不要使用它。添加排序或修复错误查询条件,如果你看到的消息,而不是。非常感谢!