1

次のようなコレクションがあります。

{
    "_id" : ObjectId("foo-1"),
    "status" : "good",
    "value" : "100.00"
},

{
    "_id" : ObjectId("foo-2"),
    "status" : "good",
    "value" : "100.00"
}

私は2つのものを手に入れたいです:

  • すべてのオブジェクトの合計「値」
  • 特定のステータスを持つすべてのオブジェクトの合計 "値

これが私のマップ/リデュース関数です:

var map = function () {
    emit("total", {sum: this.value )) 
    }

var reduce = function (key, values) {
    var result = {sum:0};
    values.forEach(function (value) {result.sum += value.value;});
    return result;
    }

var t = db.leads.mapReduce(map, reduce, {out : "total"});
db[t.result].find(); 

上記の出力は次のとおりです。

PRIMARY> db[t.result].find();
{ "_id" : "total", "value" : { "sum" : NaN } }

なぜ「合計」はNaNに戻ってくるのですか?

4

1 に答える 1

0

あなたのreduce関数で-

{result.sum += value.value;}

しかし、「合計」フィールドを含むドキュメントを発行しています。試す:

{result.sum += value.sum;}
于 2012-08-18T03:57:41.340 に答える