ReferenceError:尝试MapReduce MongoDB时未定义id

时间:2013-05-04 08:51:59

标签: mongodb mapreduce

我的MongoDB数据库中有这样的结构,集合transactions_dev

{
   "_id": ObjectId("4f7aab939e2530cc028552f2"),
   "count": 1,
   "item-id": 2230494020,
   "price": 34.99,
   "seller-id": 16435416,
   "time": "20120403",
   "type": "now" 
}

我想将其保存到另一个集合中,它将按seller-idtime分组(我想提供每个卖家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字段?

怎么做?

1 个答案:

答案 0 :(得分:1)

因为您在键名中使用了某些字符(在您的情况下为' - ',空格导致相同的问题),您不能说this.seller-id - 它被解析为this.seller减去id。将地图功能更改为:

function() { emit(
    { t: this.time, s: this["seller-id"]},
    { msum: this.price }
);}