Карта MongoDB уменьшить найти наибольшую сумму покупок - PullRequest
0 голосов
/ 13 марта 2012

У меня есть коллекция транзакций покупки:

{....,"userId": "1","amount":3,....}
{....,"userId": "1","amount":1,....}
{....,"userId": "2","amount":4,....}
{....,"userId": "1","amount":2,....}

Мне нужно напечатать userID с максимальной суммой покупок и самой суммой.

У меня нет проблем, чтобы получить сумму покупок, используя карту уменьшить:

function map(){
    emit(this.userID,{amount:this.amount}); 
} 

затем уменьшите:

function reduce(key,value){
    var sum = 0;
    for ( var i=0; i<value.length; i++ ) {

            sum += value[i].amount;
    }
    return sum;
}

Я понимаю, что мне нужно использовать функцию финализации, чтобы выбрать самый большой результат и вернуть его как одну коллекцию.
Как я могу использовать функцию финализации, чтобы выбрать самый большой результат? Вы можете помочь?

Обновление:

С точки зрения SQL это должно быть примерно так:

select MAX(tbl.amn), tbl.uid from 
(select o, userID as uid, SUM(o.amount) as amn from order o GROUP BY o.userID ) as tbl GROUP BY tbl.uid

1 Ответ

1 голос
/ 13 марта 2012
  • Вывести вашу карту / уменьшить результат в коллекцию.
  • Построить индекс по сумме.
  • Запросить порядок по сумме по убыванию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...