我已成功使用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
答案 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将检查字符串类型。