【MongoDB日常记录】group后求count(distinct 某字段) 的方法

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值