在mongodb中与众不同的分组依据

时间:2018-08-13 19:28:16

标签: mongodb mongodb-query aggregation-framework

我有这个收藏集:

{
    "_id": "5b71c2ec3676d54422044a46",
    "resource": "/orders/4020283365",
    "user_id": 123453,
    "updated_at": "2018-08-13T17:42:04.000Z",
    "created_at": "2018-08-13T17:42:04.000Z"
}

我需要获取不同的resource的总数,并按user_id进行分组,如下所示:

{
    "user_id": 123453, 
    "total_orders": 231
}

我尝试使用此代码,但没有用:

db.callbacks.aggregate([
    {$match: {'resource' : /orders\/.*/}}, 
    {$group:{
        _id:{
            user_id: $user_id, 
            resource: $resource
        }, 
        numberOforders:{
            $sum:1
        }
    }}
])

如何获取按user_id分组的订单总数?

1 个答案:

答案 0 :(得分:1)

您可以尝试下面的聚合查询。

使用$addToSet收集资源字段的所有唯一值,然后使用$size来计数唯一值。

类似

db.callbacks.aggregate([
 {"$match": {"resource" : /orders\/.*/}}, 
 {"$group":{
     "_id": "$user_id", 
     "distinctorders":{"$addToSet":"$resource"}
 }},
 {"$project":{"total_orders":{"$size":"$distinctorders"}}}
])