在mongodb node.js中使用$ group with find

时间:2016-10-03 07:37:33

标签: node.js mongodb mongoose aggregation-framework mongodb-aggregation

我希望在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
}

2 个答案:

答案 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 }
            
        }
    }
])