1

Я хочу сгруппировать по user_id из order коллекции, где есть много записей, но я хочу, чтобы получить 5 лучших пользователей, которые сделали больше заказов и суммируют общую цену конкретного пользователя ,

Например, если я сделал 10 заказов, я хочу получить свой идентификатор и сумму всех моих заказов. Я использовал ниже код, но он не работает:

Order.find({$group : { user_id : "$user_id"}},function(error,fetchAllTopUsers){ 
    console.log('##################'); 
     console.log(fetchAllTopUsers); 
    }) 

Я проверил этот пример, но они не используют найти с $group. Я новичок в Node.js и MongoDB.

Query and sum all with mongoose

Образцы документов

{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 100 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 59 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 26 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 533 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 544 },  
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 250 }, 
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 157 }, 
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 149 }, 
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 104 } 

Я ожидаю выход, как показано ниже:

{ 
    user_id : '57c7f4312b3c9771219bd21c', 
    finalTotal : 1262 
}, 
{ 
    user_id : '57efb93fdc78c816a3a15c4a' 
    finalTotal : 660 
} 
+0

ОК, позвольте мне добавить данные таблицы. –

ответ

1

Оператор $group доступен только со структурой агрегации, следовательно, вы должны запустите конвейер агрегации, который группирует документы по user_id, а затем сортирует документы по агрегированному полю finalTotal, используя $sort, а затем получить 5 лучших документов с использованием $limit.

Следуйте этот трубопровод, чтобы получить нужный результат:

Order.aggregate([ 
    { 
     "$group": { 
      "_id": "$user_id", 
      "finalTotal": { "$sum": "$totalprice" } 
     } 
    }, 
    { "$sort": { "finalTotal": -1 } }, 
    { "$limit": 5 } 
]).exec(function(error, fetchAllTopUsers){ 
    console.log('##################'); 
    console.log(fetchAllTopUsers); 
}); 
+0

Благодарим вас за ответ. Мне нужно суммировать общую цену по user_id. например, priteh составляет 100 заказов, а общая цена - 15000, Chridam составляет 3 порядка, а общая цена - 5000, как –

+0

. Ответ выше, но ниже не работает. см. мой комментарий еще раз. Я отредактировал с помощью примера –

+0

Да, сэр, я согласился, позвольте мне изменить свой вопрос. –