使用$ 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); });