mongodb получить последнюю дату для группы


У меня есть данные в виде

{userid: 123,
actiontype: 'loggedin',
timestamp: date-time}

Я хочу выполнить запрос, который сгруппирует данные для уникальных комбинаций userid и actiontype и вернет документ с последним значением метки времени.

Есть идеи, как я могу это сделать? В настоящее время я думаю о том, чтобы сделать поиск, а затем бросить возвращенные значения в массивы (python и pymongo), а затем выполнить операции там. Однако я чувствую, что это будет гораздо более элегантно/эффективно сделать это непосредственно на mongodb.

1 2

1 ответ:

Вы можете сделать это с помощью функции группы Монго .Следующий код показывает, как это можно сделать.

db.stack.group(
{
    keyf: function(doc) {
        return {
            userid : doc.userid, 
            actiontype : doc.actiontype
        };
    },
    reduce: function(obj,prev) {
        if (prev.maxdate < obj.timestamp) { 
            prev.maxdate = obj.timestamp; 
        } 
    },
    initial: {maxdate:0}
});