Как агрегировать данные как tps (транзакций в секунду) из коллекции из mongodb - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть коллекция запросов со следующей схемой

// Request Model
const RequestSchema = new db.mongoose.Schema({
    date: {type: Date, default: Date.now},
    msisdn: String,
    source: String,
    response: Object
})

Как можно агрегировать данные в mongodb (библиотека mongoose) как транзакции в секунду?

Вот способСейчас я агрегирую

Model.Request
    .aggregate([{
        $match: {
            date: {
                $lte: new Date(),
                $gte: new Date(datetime.daysago(n))
            }
        }
    },
    {
        $group: {
            _id: {
                year: { $year: '$date' },
                month: { $month: '$date' },
                dayOfMonth: { $dayOfMonth: '$date' },
                hour: { $hour: '$date' },
                minute: { $minute: '$date' },
                second: { $second: '$date' }
            }, cnt: { $sum: 1 }
        }
    }
    ])

Возвращает следующий результат

[ { _id:
     { year: 2019,
       month: 3,
       dayOfMonth: 19,
       hour: 14,
       minute: 0,
       second: 25 },
    cnt: 5 },
  { _id:
     { year: 2019,
       month: 3,
       dayOfMonth: 19,
       hour: 14,
       minute: 0,
       second: 24 },
    cnt: 2 },
  { _id:
     { year: 2019,
       month: 3,
       dayOfMonth: 19,
       hour: 14,
       minute: 0,
       second: 23 },
    cnt: 7 },
  { _id:
     { year: 2019,
       month: 3,
       dayOfMonth: 19,
       hour: 14,
       minute: 0,
       second: 22 },
    cnt: 1 }]

Однако я хочу включить каждую секунду для периода, что-то вроде:

[{
    date: '2019-04-05T10:22:34'
    tps: 412
},
{
    date: '2019-04-05T10:22:35'
    tps: 5
},
{
    date: '2019-04-05T10:22:36'
    tps: 0 // <- problem is here
},
{
    date: '2019-04-05T10:22:37'
    tps: 201
},
{
    date: '2019-04-05T10:22:38'
    tps: 531
},
{
    date: '2019-04-05T10:22:39'
    tps: 400
}
]

Это возможно с библиотекой мангуста?Или я связан с манипуляциями с кодом?

...