搜索

首页  >  问答  >  正文

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

在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" : "0ae71c7\ne-7da6-9051-ec6c-49dc671b4e3a"
        },
        "value" : {
                "result" : 1
        }

实际输出数据为

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

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

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

大家讲道理大家讲道理2777 天前643

全部回复(1)我来回复

  • 大家讲道理

    大家讲道理2017-05-17 10:06:04

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

    供参考。

    Love MongoDB!Have fun!

    回复
    0
  • 取消回复