У меня есть mongoDB, содержащая записи вроде этого:
{
"_id" : ObjectId("5cf3e2e0839abf5afbf05052"),
"sex" : "Male",
"location" : {
"city" : "Solingen",
"address" : {
"streetname" : "Dawn",
"streetnumber" : "888"
}
},
"credit" : [
{
"type" : "switch",
"number" : "201864776633337",
"currency" : "CNY",
"balance" : "4898.89"
},
{
"type" : "jcb",
"number" : "3552382704063930",
"currency" : "IDR",
"balance" : "4501.62"
}
]
},
{
"_id" : ObjectId("5cf3e2e0839abf5afbf051c6"),
"sex" : "Male",
"location" : {
"city" : "Hamburg",
"address" : {
"streetname" : "Brentwood",
"streetnumber" : "6"
}
},
"nationality" : "Germany",
"credit" : [
{
"type" : "jcb",
"number" : "4017959913393",
"currency" : "SEK",
"balance" : "3867.38"
},
{
"type" : "jcb",
"number" : "5100136044479699",
"currency" : "CNY",
"balance" : "4323.61"
}
]
},
Я хотел бы выполнить, используя совокупный средний и сумма денег с карт.
ИтакМой код должен отображаться через Массивы карт и добавлять баланс на картах.
Я пытался использовать map и mergeObjects
[
{ "$addFields": {
"credit": {
"$map": {
"input": "$credit",
"in": {
"$mergeObjects": [
"$$this",
{
"convertedBalance": {
"$toDouble": "$$this.balance"
}
}
]
}
}
}
}},
{ $unwind : "$credit" },
{ $match : { sex : "Female", nationality : "Poland"}},
{$group : { _id : "$credit.currency", avgBalance : {$avg : "$convertedBalance"}, sumBalance : {$sum : "$convertedBalance"}}}
]
).toArray());
Но результат равен null
для avgBalance
и 0для sumBalance
как показано ниже:
connecting to: mongodb://localhost:27017/nbd?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b49b33ce-808b-4814-a31e-7a70ce6fe0d7") }
MongoDB server version: 4.0.10
[
{
"_id" : "MYR",
"avgBalance" : null,
"sumBalance" : 0
},
{
"_id" : "ALL",
"avgBalance" : null,
"sumBalance" : 0
},
, и результат должен быть примерно таким:
"_id" : "AFN",
"avgBalance" : 5585.163333333333,
"sumBalance" : 16755.489999999998
},