【MongoDB日常记录】group后求count(distinct 某字段) 的方法
今天,我遇到了个在mongo中 group后 count(distinct f1) 的需求。备注:f1 代表某字段大意是: 根据key1 分组后,找出该组中字段 f1的不重复数量1. mysql实现伪sql如下:(这个挺简单的)sqlselect key1, count(distinct f1) from t group by key12. mong...
今天,我遇到了个在mongo中 group后 count(distinct f1) 的需求。 备注:f1 代表某字段
大意是: 根据key1 分组后,找出该组中字段 f1的不重复数量
1. mysql实现
- 伪sql如下:(这个挺简单的)
sql select key1, count(distinct f1) from t group by key1
2. mongo如何实现呢?
-
mongo实现如下: ``` db.t.aggregate([ {$match: { createTime: { $gte: 1, $lt: 8888888888888888 } }}, { '$group': { "_id": {'key1':'$key1'}, f1DistinctCount:{$addToSet:"$f1"}, successCount: { $sum: { $cond: [ { $and: [ { $eq: ['$successOrFail', 1] }] }, 1, 0 ] } }, failCount: { $sum: { $cond: [ {$and: [ { $eq: ['$successOrFail', 0] }] }, 1, 0 ]
} } },}, { '$project': { '_id': 1, 'key1':1,'successCount': 1, 'failCount': 1,'f1DistinctCount':1 } } ],{allowDiskUse: true}); ```
f1DistinctCount是一个set集合 如果你使用mongotemplate的话 他是个 com.mongodb.BasicDBList 集合,取出集合的长度即得到我想要的结果了
当然如果你有更好的方式,欢迎交流讨论一起学习。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)