今天,我遇到了个在mongo中 group后 count(distinct f1)
的需求。 备注:f1 代表某字段
大意是: 根据key1 分组后,找出该组中字段 f1的不重复数量
1. mysql实现
- 伪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 集合,取出集合的长度即得到我想要的结果了
当然如果你有更好的方式,欢迎交流讨论一起学习。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END