0

我的 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 字段?

怎么做?

4

1 回答 1

1

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

function() { emit(
    { t: this.time, s: this["seller-id"]},
    { msum: this.price }
);}
于 2013-05-05T07:37:26.670 回答