我正在尝试计算Mongo中NumberLong类型的数百万条记录的平均值。 但是,由于尺寸的原因,聚合和$ avg不起作用。
有什么好方法可以解决它吗?
答案 0 :(得分:2)
您可以使用MapReduce。
您的地图函数将获取每个文档并发出一个包含两个字段的对象:一个字段value
包含您想要平均的值,一个字段count
的值为1
。
您的reduce函数将汇总传递给它的所有对象的字段count
和字段value
,返回一个对象,表示汇总了多少文档以及它们的总和。
然后,您的终结函数会将值除以结果对象的计数并返回此数字。
The second MapReduce example in the official documentation非常接近您的用例,您应该可以将其用作参考。唯一的区别是您只需要一个平均值,而不是单独的集合子集,因此您可以用常量值替换key
。