Строка mongoDB в преобразовании массивов в double - PullRequest
1 голос
/ 02 июня 2019

У меня есть 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
    },

1 Ответ

1 голос
/ 02 июня 2019

Когда вы запускаете $group stage convertedBalance вкладывается в credit, когда вы ссылаетесь на несуществующее поле корневого уровня, попробуйте:

{
    $group : { 
        _id : "$credit.currency", 
        avgBalance : {$avg : "$credit.convertedBalance"}, 
        sumBalance : {$sum : "$credit.convertedBalance"}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...