1

我想从user_id组合user_idorder其中有很多条目,但我想获取订单数量最多的5位用户,并计算特定用户的总价。

例如,如果我发出了10个订单,我想获取我的ID和我所有订单的总和。 我用下面的代码,但它不工作:

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

OK,让我补充表数据。 –

回答

1

$group运营商仅可与聚合框架,因此你需要运行由组织文档的聚合管道字段,然后按照汇总的finalTotal字段使用$sort对文档进行排序,然后使用$limit获得前5个文档。

按照这条管道来获得所需的结果:

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总计总价。像pritesh使100订单和总价格是15000,Chridam使3订单和总价格是这样的 –

+0

以上答案正在工作,但下面不工作。再次看到我的评论。我已经编辑例 –

+0

是的,先生,我同意,让我编辑我的问题。 –