mongodb 中 mapReduce 有一部分value不经过reduce处理

浏览:48日期:2023-06-13

问题描述

在mongodb 中 使用mapReduce 有一部分value不经过reduce处理,很是疑惑。先上代码

db.test.mapReduce(function () { emit({host: this.host,os: this.os,computed_on_date: this.computed_on_date,uid: this.uid }, {data: this.os});},function (key, value) { return {result: 1};},{ out: 'a'} )

应该输出的数据为

'_id' : {'host' : 'www.ddc.com','os' : 'android','computed_on_date' : '2017-04-19','uid' : '0ae71c7ne-7da6-9051-ec6c-49dc671b4e3a'},'value' : {'result' : 1}

实际输出数据为

'_id' : {'host' : 'www.ddc.com','os' : 'android','computed_on_date' : '2017-04-19','uid' : '0ae71c7ne-7da6-9051-ec6c-49dc671b4e3a'},'value' : {'data' : 'android'}

非常疑惑,在条件emit的key少于4个时候,会正常显示,如果大于3个或者加了query条件,就不会进行reduce处理。

另外有一个问题,mapReduce在有query时,是先处理query还是选处理reduce再在结果中处理query

问题解答

回答1:

建议使用aggregation来做。与MR比较,aggregation是MongoDB的first class的特性。

供参考。

Love MongoDB!Have fun!

相关文章: