Как нарезать и мондифицировать агрегацию mongodb - PullRequest
0 голосов
/ 01 декабря 2018

Я новичок в MongoDB и пытаюсь проецировать поле amount из decimal в double при запросе.Прямо сейчас я добавляю $$ROOT к массиву и затем разрезаю этот массив, чтобы получить только подмножество транзакций.Я полагаю, что, возможно, смогу преобразовать его, когда переместусь в массив ($group stage) или после нарезки ($project stage), но я не могу понять, как это сделать.Какие-нибудь советы?Конечная цель - представить сумму, количество и самые последние транзакции (мне нужно добавить логику сортировки позже).

db.transactions.aggregate([
    {$match:{}},
    {$group:{
        _id:null,
        transactions:{
            $push:"$$ROOT"
        },
        count:{$sum: 1},
        sum: {$sum: "$amount"}
    }},
    {$project:{
        _id:0,
        summary:{ count: "$count", sum: {$convert:{input:"$sum",to:"double"}}},
        transactions: {$slice:["$transactions", 2]}
    }}
])

1 Ответ

0 голосов
/ 02 декабря 2018

Я понял, что $ facet позволяет мне сделать это:

db.transactions.aggregate([{
    $facet:{
        summary: [
            {$match:{}},
            {$group:{
                _id:null,
                count:{$sum: 1},
                sum: {$sum: "$amount"}
            }},
            {$project:{
                _id:0,
                count: "$count",
                sum: {$convert:{input:"$sum",to:"double"}}}
            }
        ],
        transactions: [
            {$match:{}},
            {$sort:{date:-1,timestamp:-1}},
            {$limit:1},
            {$addFields:{amount: {$convert:{input:"$amount",to:"double"}}}}
        ]
    }
}]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...