我希望在user_id
集合中order
进行分组,其中有很多条目,但我想获取已经订购了更多订单的前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 :(得分:1)
$group
运算符仅适用于聚合框架,因此您需要运行聚合管道,该管道按com.google.common
字段对文档进行分组,然后按聚合/* Create Callable task */
Callable<Boolean> task = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
... Some operations ...
return Boolean.TRUE (or FALSE);
}
};
/* Check result */
Boolean result = PersistUtils.executeInTransaction(getDB(), task);
对文档进行排序字段使用 $sort
,然后使用 $limit
获取前5个文档。
按照此管道获取所需结果:
user_id
答案 1 :(得分:0)
我们可以这样使用
db.getCollection('form_a').aggregate([
{
"$group": {
"_id": "$Status",
"counter": { "$sum": 1 }
}
}
])