Mongodb - MapReduce连接值而不是求和

时间:2013-04-22 15:26:10

标签: mongodb mapreduce

我已成功使用Mongodb和MapReduce将超过500万行的销售声明汇总至约6万。对结果非常满意,但我对结果中的一行感到困惑似乎已经连接了结果而不是总结它,所以我最终得到的值字段包含“0.00590100000000.0059010.133150000000.0053100.002960.043208000.00189”

以前有没有人经历过这个?

仔细分析原始陈述中涉及的线条,我看不到任何会导致它的东西,因为它们看起来完全一样。共有相同标识符的偶数值。

我的代码如下,任何人都可以发现可能导致它的任何内容吗?就像我说的那样,它仅仅是来自520万原始声明的7行所以准确性非常好,它只是没有发现并且我知道它会让我感到烦恼。

mongoimport -d test -c sales --type csv --file sales_rawdata.csv --headerline

var mapFunction1 = function() {
                       emit({video_id: this.video_id, isrc: this.isrc, country: this.country}, this.amount_payable);
                   };


var reduceFunction1 = function(keyIsrc, valuesAmountPayable) {
                        return Array.sum(valuesAmountPayable);
                    };

db.sales.mapReduce(
        mapFunction1,
        reduceFunction1,
            { out: "sales_total_by_country_and_isrc" }
                )

db.sales_total_by_country_and_isrc.find()           

mongoexport --csv -d test -c sales_total_by_country_and_isrc -q '{value: {$ne: 0}}' -f "_id.video_id","_id.isrc","_id.country","value" -o sales_total_by_country_and_isrc.csv

1 个答案:

答案 0 :(得分:1)

可能是您的amount_payable值之一存储为字符串。如果是这样,那么Array.sum将连接为一个总和。

您可以使用以下方式进行测试:

db.sales_total_by_country_and_isrc.find( { video_id: <the video_id in question>,
                                           isrc: <the isrc in question>,
                                           country: <the country in question>,
                                           amount_payable: {$type: 2 }
                                       } )

其中$ type:2将检查字符串类型。