比如在 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 }} },
])
db.test.distinct(“date”,{“companyId” : 123}).length;
看代码是没问题的
@jiangli373 谢谢你的回答,这个方式在这之前被我否决了,如果 document 数量增多,对性能损耗会不会比较大,因为这个数据报表的collection,数据量是递增的,我不想把所有日期的结果集数组都取出来,其实我是想从mongoose 或者 mongodb 层上面能否解决这个问题,或者说有更优雅点的方式能解决我这个问题.
MongoDB数据量几十万条的话基本没多少性能问题,数据总空间上1TB的话还是好好搞大数据架构吧(HDFS之类的),毕竟mongodb是业务型数据库,有专门的列式存储优化的数据库是专门针对统计分析设计的,速度超快,压缩率奇高。
@libook 谢谢你的解惑哈,初期以快速实现解决问题为主,后续数据量上去来在考虑优化这块的工作.