使用$ group在mongodb node.js中查找

我想通过order集合中的user_id进行分组,其中有很多条目,但是我想获取订单数量最多的五位用户,并总结特定用户的总体价格。

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

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

我已经检查了这个例子,但是他们没有使用$group查找。 我在Node.js和MongoDB中是新的。

与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 } 

$group操作符仅适用于聚合框架,因此您需要运行聚合pipe道,将user_id字段对文档进行finalTotal ,然后使用$sort对汇总的finalTotal字段进行$sort ,然后使用$limit获取前5个文档。

按照这个pipe道获得所需的结果:

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