You're creating amount field in $project and using it in same stage there itself which is why it's returning 0 on "total": {$sum:"$amount"}, also $sum seems to not take arrays.
Assuming your documents look like :
{
"auditMessages": {
eventMetaData: [
{
"Counterparty Name": "Mr Jalel CHAHED",
abc: 1,
"Transaction Amount": "4.32"
},
{
"Counterparty Name": "Mr Jalel CHAHED",
abc: 11,
"Transaction Amount": "4.32"
},
{
"Counterparty Name": "Mr Jalel CHAHED",
abc: 12,
"Transaction Amount": "1.32"
},
{
"Counterparty Name": "Mr Jalel CHAHED",
abc: 122,
"Transaction Amount": "1.32"
}
]
}
}
As auditMessages.eventMetaData is an array then when you do :
"$auditMessages.eventMetaData.Counterparty Name" or "$auditMessages.eventMetaData.Transaction Amount" then what you get is an array of values like what you see in your result as of now.
Query :
db.collection.aggregate([
{
$project: {
account: { $arrayElemAt: [ "$auditMessages.eventMetaData.Counterparty Name", 0 ] }, // get name from first element in array,use only if name is same in all objects
total: {
$reduce: {
input: "$auditMessages.eventMetaData.Transaction Amount", // Iterate on array
initialValue: 0,
in: { $trunc: [ { $add: [ "$$value", { $toDouble: "$$this" } ] }, 2 ] } // convert string to double, sum-up & truncate to 2 digits
}
}
}
}
])
Test : mongoplayground
Ref : aggregation
comptecollection look like we can't provide any specific solution to this question.