mongoDB - Получить подстроку и преобразовать строку в число на групповом этапе - PullRequest
1 голос
/ 08 февраля 2020

Я пытаюсь суммировать зарплату сотрудников с помощью агрегации в MongoDB, проблема в том, что зарплате предшествует символ валюты $, и я не могу получить сумму в группе.

Пример записи в базе данных:

{  
"_id" : ObjectId("5e2f408b1548343a74dce68a"),  
"employee_first_name" : "Gwenaëlle",  
"employee_last_name" : "Shawley",  
"department" : "Product Management",  
"salary" : "$205223.43",  
"years_in_job" : 17,  
"dob" : "4/12/1980",  
"childrenId" : [  
ObjectId("5e2da031c71c0b0f54e35236"),  
ObjectId("5e2da031c71c0b0f54e35234"),  
ObjectId("5e2da031c71c0b0f54e35235"),  
],  
"updatedAt" : ISODate("2020-02-06T16:47:29.208Z")  
}

Запрос, написанный на MongoDB:

aggregation query:
db.getCollection('employee_details')
    .aggregate([
        { $match: { department: "Product Management" } },
        {
            $group:
            {
                "_id": "$years_in_job",
                total: { $sum: '$salary' }
            }
        }
    ])

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

Попробуйте этот запрос:

db.getCollection('employee_details')
    .aggregate([
        { $match: { department: "Product Management" } },
        {
            $group:
            {
                "_id": "$years_in_job",
                /** get substring of salary which removes $ from string & then convert it into double for sum */
                total: { $sum: { $toDouble: { $substr: ["$salary", 1, -1] } } }
            }
        }
    ])

Тест: MongoDB-Playground

0 голосов
/ 08 февраля 2020

Я предлагаю сначала убрать $ в зарплате, а затем добавить его или объединить позже, после того как общая стоимость уже будет вычислена.

...