我正在尝试使用
sum
函数在我的 mongo
文档中 aggregate
某些字段值。但我得到的总和值为 0。
下面是我的示例 mongo 文档:
{
_id: ObjectId("64d9e5e7f7b6237202be444b"),
userName: '[email protected]',
remoteAccessToken: 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbkBtYWlsLmNvbSIsImlhdCI6MTY5MTYxMTczNCwiZXhwIjoxNjkxNjEyMzM0fQ.PkIyyetG739jTQPzmypsbF8oTCrBzYLe5bWbKj38vjA',
requestPayload: { amount: 90, msisdn: '9816762561', transactionId: 41657 },
response: {
code: 200,
data: {
message: 'Payment success'
},
error: null
},
createdOn: ISODate("2023-08-14T08:29:27.572Z"),
_class: 'com.atlas.xorx.domain.PaymentLogDetail'
}
我想要实现的目标
我想要所有成功付款的
requestPayload.amount
总和,即某些 response.code:200
的
userName
我正在尝试以下聚合查询:
db.paymentLogDetail.aggregate([{"$match":{"$and" : [{"userName" : "[email protected]"},{"response.code":200 }]}},{"$group":{"_id":null,"total":{"$sum":"requestPayload.amount"}}}]);
我收到以下回复:
[ { _id: null, total: 0 } ]
我必须在现有查询中进行哪些更改才能获得任何用户名的成功付款金额的有效总和。
响应如期而至。这只是一个字符问题。我们想要
sum
(或任何其他 aggregate
函数)的值必须附加 $
。所以正确的查询是:
db.paymentLogDetail.aggregate([{"$match":{"$and" : [{"userName" : "[email protected]"},{"response.code":200 }]}},{"$group":{"_id":null,"total":{"$sum":"$requestPayload.amount"}}}]);
是
"$requestPayload.amount"
而不是 "requestPayload.amount"