今天,我遇到了个在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 集合,取出集合的长度即得到我想要的结果了

当然如果你有更好的方式,欢迎交流讨论一起学习。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐