无法从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部分。请您详细说明一下,好吗?不要使用它。添加排序或修复错误查询条件,如果你看到的消息,而不是。非常感谢!