0

col1、col2、WebsiteCode、CreatedDate、col3 ....、colnの多くの列を持つコレクションがあります。

CreatedDateの範囲でWebsiteCodeでグループ化したい。

私もです:

地図:

function Map() {
         var key={WebsiteCode:this.WebsiteCode};
         val={Count: 1};
         emit(key,val);
 }

減らす :

function Reduce(key, values) {
var res = {Total:0};
values.forEach(function(value) {
res.Total += value.Count;
});
return res;
}

そしてクエリ範囲DateTime:

{ "CreatedDate" : { "$gte" : dateFrom , "$lte" : dateTo } }

最後に、このmapreduceコマンドを実行します。Total = NaN 結果は、 Exを含む多くの行で期待したものとは異なります。{_id:{WebsiteCode:"websitecode1"}}, {value:{Total:NaN}}

しかし、countコマンドを実行すると:

db.collect.find({ "WebsiteCode" : "websitecode1", "CreatedDate" : { "$gte" : dateFrom), "$lte" : dateTo } }).count();

結果の戻り値:927

私が間違ったことを説明してもらえますか?

4

1 に答える 1

0

削減関数は、出力された値と同じ形状の値を返す必要があります。Countそのため、マップとTotalリデュースでは使用できません。

代わりにこれを試してください:

function Reduce(key, values) {
    var res = {Count:0};
    values.forEach(function(value) {
        res.Count += value.Count;
    });
    return res;
}
于 2012-12-28T03:13:30.553 に答える