0

我已经成功地使用 Mongodb 和 MapReduce 将超过 500 万行的销售报表汇总到 60k 左右。对结果非常满意,但我对结果中的一行感到困惑,其中似乎连接了结果而不是求和,所以我最终得到了一个包含“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
4

1 回答 1

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 将检查字符串类型。

于 2013-04-22T16:08:53.333 回答