2017-08-08 183 views
0

我正尝试使用计数将分组内的数据分组。在MongoDB中使用聚合框架分组并计数

{ 
     "_id" : ObjectId("59899846b5f5670840040b0b"), 
     "client_id" : "merlin", 
     "scope" : "eee", 
     "user_id" : "u", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T10:53:58.816Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("59899849b5f5670840040b0c"), 
     "client_id" : "merlin", 
     "scope" : "eee", 
     "user_id" : "u", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T10:54:01.908Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989984db5f5670840040b0d"), 
     "client_id" : "merlin", 
     "scope" : "eee", 
     "user_id" : "y", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T10:54:05.280Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989adb2d699bd211caa07ad"), 
     "client_id" : "symphony", 
     "scope" : "eee", 
     "user_id" : "q", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T12:25:22.518Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989adb8d699bd211caa07ae"), 
     "client_id" : "symphony", 
     "scope" : "eee", 
     "user_id" : "w", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T12:25:28.954Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989adbcd699bd211caa07af"), 
     "client_id" : "symphony", 
     "scope" : "eee", 
     "user_id" : "q", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T12:25:32.753Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989adc0d699bd211caa07b0"), 
     "client_id" : "symphony", 
     "scope" : "eee", 
     "user_id" : "r", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T12:25:36.176Z"), 
     "open_url" : null, 
     "__v" : 0 
} 

我想要的是在client_id的基础上进一步分组数据,并进一步根据user_id来获取文档的计数。

我曾经尝试这样做: -

Logger.aggregate([ 
    { "$group": { 
     "_id": {client: "$client_id"}, 
     "count": { "$sum": 1 } 
    }} 
]) 

我得到: - 客户:梅林 数:3, 客户端:交响乐, 数:4

但如何分组这个上user_id的基础。

我想最后的结果将是: -

客户端:梅林, 数:2, 客户端:交响乐, 数:3

+0

您的意思是*“每个用户的每个客户端”?* –

回答

0

这是查询结果。

db.collection.aggregate([ 
    { "$group": { 
     "_id": {client: "$client_id" }, 
     "clientIdCount": { "$sum": 1 }, 
     "userids" : {"$addToSet" : "$user_id"} 
    } 
    }, 
    { "$project" : {"_id.client" : 1, "clientIdCount" : 1, numberOfUsers : {$size : "$userids"} } 
    } 
]); 

输出: -

如果你不想在输出clientIdCount,距离1的值更改为0目前旁边clientIdCount

/* 1 */ 
{ 
    "_id" : { 
     "client" : "symphony" 
    }, 
    "clientIdCount" : 4, 
    "numberOfUsers" : 3 
} 

/* 2 */ 
{ 
    "_id" : { 
     "client" : "merlin" 
    }, 
    "clientIdCount" : 3, 
    "numberOfUsers" : 2 
} 
+0

非常感谢Notionquest。 –

+0

如果有帮助,请接受答案。 – notionquest

0

如果我明白你的问题正确这是你的数据库查询

db.Logger.aggregate([ 
     { 
      $group : { 
       _id : "$client_id", user : { $push: "$user_id" }, 
       count: { $sum: 1 } 
        } 
     } 
    ]) 
相关问题