我的MongoDB数据库中有这样的结构,集合transactions_dev
:
{
"_id": ObjectId("4f7aab939e2530cc028552f2"),
"count": 1,
"item-id": 2230494020,
"price": 34.99,
"seller-id": 16435416,
"time": "20120403",
"type": "now"
}
我想将其保存到另一个集合中,它将按seller-id
和time
分组(我想提供每个卖家ID的每日销售额(SUM(价格))
为此,我写了这个mapreduce:
db.runCommand({
mapreduce: "transactions_dev",
map: function() { emit(
{ t: this.time, s: this.seller-id},
{ msum: this.price }
);},
reduce: function(key, vals) {
var ret = {msum: 0};
for(var i=0; i< vals.length; i++) {
ret.msum += vals[i].msum;
}
return ret;
},
out: 'result1',
verbose: true
});
但我得到了这样的例外:
"errmsg" : "exception: map invoke failed: JS Error: ReferenceError: id is not defined nofile_b:1",
"code" : 9014,
这是否意味着我必须为缩减数据明确定义_id字段?
怎么做?
答案 0 :(得分:1)
因为您在键名中使用了某些字符(在您的情况下为' - ',空格导致相同的问题),您不能说this.seller-id - 它被解析为this.seller减去id。将地图功能更改为:
function() { emit(
{ t: this.time, s: this["seller-id"]},
{ msum: this.price }
);}