请教一个 mongodb 统计的问题,有知道的可以提供个思路吗
发布于 7 年前 作者 isunkui 3008 次浏览 来自 问答

比如在 mysql 中,我想获得某个表 companyId 为123, 唯一 date 的总记录数,用下面这条语句就可以做到。 SELECT COUNT(DISTINCT(date)) FROM tb_test WHERE companyId = 123

在 mongodb 中,翻阅了相关文档没有找到相应的统计方法啊。 数据结构片段,如下

[{
    date: '2017-04-14',
    uid: 521,
    companyId: 123
}, {
    date: '2017-04-14',
    uid: 522,
    companyId: 123
}, {
   date: '2017-04-15',
   uid: 521,
   companyId: 123
}, {
   date: '2017-04-15',
   uid: 522,
   companyId: 123
}]

目前通过 group 聚合拿到的结果,并不是我想要的,我希望拿到的 count 总记录数是2.

db.test.aggregate([
     { $match: {companyId: 123} },
     { $group: {_id: { date: '$date' },count: { $sum: 1 }} },
])
5 回复

db.test.distinct(“date”,{“companyId” : 123}).length;

看代码是没问题的

@jiangli373 谢谢你的回答,这个方式在这之前被我否决了,如果 document 数量增多,对性能损耗会不会比较大,因为这个数据报表的collection,数据量是递增的,我不想把所有日期的结果集数组都取出来,其实我是想从mongoose 或者 mongodb 层上面能否解决这个问题,或者说有更优雅点的方式能解决我这个问题.

MongoDB数据量几十万条的话基本没多少性能问题,数据总空间上1TB的话还是好好搞大数据架构吧(HDFS之类的),毕竟mongodb是业务型数据库,有专门的列式存储优化的数据库是专门针对统计分析设计的,速度超快,压缩率奇高。

@libook 谢谢你的解惑哈,初期以快速实现解决问题为主,后续数据量上去来在考虑优化这块的工作.

回到顶部