MongoDB 去重(distinct)查询后求总数(count)

Jun 29, 2018 阅读(4680)

标签: MongoDB




在使用MonoDB 做报表汇总经常的有去重统计总数的需求,在此总结一下实现方式:

1, 直接使用distinct 语句查询, 这种查询会将所有查询出来的数据返回给用户, 然后对查询出来的结果集求总数(耗内存,耗时一些)

var len = db.student.distinct("name",{"age" : 18}).length;
print(len)

注,使用这种方法查询时,查询的结果集大于16M 时会查询失败,失败信息如下:

{"message" : "distinct failed: MongoError: distinct too big, 16mb cap","stack" : "script:1:20"}


2, 使用聚合函数,多次分组统计结果,最终将聚合的结果数返回给用户

db.student.aggregate([
    {$match:{"age" : 18}},
    {$project:{"name":true}},
    {$group:{_id:"$name"}},
    {$count:"total_count"}
])

或者

db.student.aggregate([
    {$match:{"age" : 18}},
    {$project:{"name":true}},
    {$group:{_id:"$name",total_count:{$sum:1}}}
])

注,这种查询数据量大时就不会出现如上查询失败的情况,而且这种查询不管是内存消耗还是时间消耗都优于上面一种查询.




MongoDB学习园