inov8
@inov8
Инженер, спортсмен, музыкант.

Как конвертировать тип данных в MongoDB?

Имеется коллекция в базе MongoDB с несколькими миллионами вот таких вот документов:

{
  "block": 3058293,
  "timestamp": {
    "$date": {
      "$numberLong": "1547460009000"
    }
  },
  "trx_id": "4b0ade8dc42ce9c3b4b8886df526b91955d95f67",
  "type": "receive_award",
  "obj": {
    "initiator": "redress",
    "receiver": "redress",
    "custom_sequence": 0,
    "memo": "so beautiful",
    "shares": "21.408084 SHARES"
  },
  "__v": 0
}


Необходимо рассчитать сумму всех значений "shares". Сам я, как говорится, только учусь. Подумал, что, возможно, есть какой-то способ конвертировать тип данных (в нашем случае это string для "21.408084 SHARES") в float. Очень желательно обойтись без внесения изменений в саму БД.

П. С. Работаю через pymongo.
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
Что то вроде этого может сработать:
db.test.aggregate([
    {
        "$addFields":{
            "sharesFloat": {
                "$function": {
                    "body": "function (shares) { if (!shares) {return 0}; return parseFloat(shares.split(' ')[0])}",
                    "args": ["$obj.shares"],
                    "lang": "js"
                }
            }
        }
    },
    {
        "$group": {
            "_id": None,
            "sum": {
                "$sum": "$sharesFloat"
            }
        }
    }
])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы