2012-04-10 12 views
2

に削減:整数、私は次のようにMongoDBでコレクションを持っているのMongoDB

{_id: {"thread": "abc"}, "value": 1} 
{_id: {"thread": "cdf"}, "value": 1} 
{_id: {"thread": "edf"}, "value": 1} 

私は次のように出力を期待して、値のキーしようとして削減にマップしてみました:

{id_: {"value": 1}, value: 3} 

MAP:

function() { 
var key = {value : this.value}; 
emit(key, 1); 
}; 

REDUCE:

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

EDIT大変質問:マップReduceが動作しなくなったため、もう有効ではありません。接続問題であり、Map Reduceではありませんでした。余分な情報のおかげで皆に感謝します。

残念ながら、それは仕事と次のようにいくつかの出力を与えませんでした:

{u'_id': {u'value': None}, u'value': 1160856.0} 

は、整数値のキーすることができません? Mongodbのmap reduce documentationを読みましたが、キーのデータ型に関する情報が見つかりませんでした。

+0

マップ/リダクション機能とは何ですか? – Thilo

+2

おそらくmongo対話シェルで整数サポートが欠けているのでしょうか? http://www.mongodb.org/display/DOCS/Overview+-+The+MongoDB+Interactive+Shell#Overview-TheMongoDBInteractiveShell-SomeNotesonDetatypes inShell – Ondergetekende

+0

を参照してください。@Thilo質問を編集して追加しました。 – codious

答えて

3

MongoDBシェルからマップ/リダクションを実行している場合、シェルはすべての整数型を2倍に変換してそのように格納する機能/問題(その点で意見が異なります))を実行している可能性があります。現時点では、シェル以外のものからm/rを呼び出す以外の実際の回避策はありません。つまり、私はあなたのm/rを実行する場合、私はこれを得る:

{ 
     "_id" : { 
       "value" : 1 
     }, 
     "value" : 3 
} 

あなたがしようとしているようだ。私はそれがそうであるかどうかわからない。最新のdbバージョンなどを実行していることを確認してください。

+1

しかし、なぜ結果が「None」の下のすべてのグループになりますか?キーとカウントが現在倍になっていることを除いて、それはまだほとんど動作しませんか? – Thilo

+0

Imマップを縮小するPythonを使用しています。キーとして値フィールドのm/rに簡単なソリューションはありますか? – codious

+0

@Thilo、はい、それは私の質問です。 – codious

関連する問題