Как вернуть счет за каждый месяц на выбранном таймфрейме - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу, чтобы мой запрос mon go возвращал счетчик для каждого МЕСЯЦА. Приведенный ниже запрос возвращает счетчик для каждого идентификатора компании для введенной даты.

Например, результатом возврата будет каждый месяц, показывающий идентификатор компании и счет за месяц.

Просто для подтверждения запроса отлично работает, я только после месячного возврата.

var from = new Date("2020-02-20T01:54:00")
var to = new Date("2020-03-25T01:54:00")
// uncomment if you wish `to` date to by NOW
// var to = ISODate()
var minimumRecordsNumber = 3;
var unixFrom = from.getTime() / 1000;
var unixTo = to.getTime() / 1000;
var heading = 'Timeframe\nfrom: ' + from + '\nto: ' + to + '\n\n'
var cursor = db.getCollection('registrations').aggregate([{
    '$match': {
        'created': {'$gte': unixFrom , '$lte': unixTo},
    }
},{
    '$group': {
        '_id': {'companyID': '$companyID', 'eventID': '$eventID'}, 
        'count': {'$sum': NumberInt(1)}}
},{
    '$match': {
        'count': {'$gte': minimumRecordsNumber},
    }
}])
var companies = {};
var events = [];
while(cursor.hasNext()) {
    var data = cursor.next()
    var companyID = data._id.companyID
    var eventID = data._id.eventID
    if (events.indexOf(eventID) === -1) {
        events.push(eventID)
        if (! companies[companyID]) {
            companies[companyID] = 1
        } else {
            companies[companyID]++
        }
    }
}
print(heading + tojson(companies))

1 Ответ

0 голосов
/ 14 апреля 2020

Если даты хранятся в MongoDB как тип даты, а не строка, вы можете использовать операторы агрегирования $ year и $ month в группе _id.

db.getCollection('registrations').aggregate([
    {'$match': {'created': {'$gte': unixFrom , '$lte': unixTo}}},
    {'$group': {
        '_id': {
                'companyID': '$companyID', 
                'eventID': '$eventID', 
                'year': {$year: "$created"},
                'month': {$month: "$created"}
               } 
        'count': {'$sum': NumberInt(1)}
    }},
    {'$match': {
        'count': {'$gte': minimumRecordsNumber},
    }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...