0

MongoDB (c# ドライバー) で単純な「最大値を取得」マップ削減を実装しています。私のテストでは、int _id = 1 から 10 のコレクションに 10 個のアイテムがあります。

私の map と reduce は次のとおりです。

var map = "function() {emit('_id', this.Id);}";
var reduce = "function(key, values) {var max = 1; for (id in values) {if(id>max) {max=id;}} } return max;}";

しかし、実行すると結果が 9 になります。

マップが文字列を出力しているため、比較が期待どおりに機能していないと思います。どんな助けでも素晴らしいでしょう

4

1 に答える 1

1

値に項目が 1 つしか含まれていない場合、Reduce 関数は実行されません。すべての ID が一意であり、マップ内のキーがその ID のみである場合、(パフォーマンスを向上させるための) 設計上の問題により、reduce フェーズは機能しません。reduce 出力のフォーマットを変更する必要がある場合は、finalizeメソッドを使用する必要があります。またはaggregation framework、データを操作するための非常に便利なツールを提供する を見てください。

ジラをチェック

jira.mongodb.org/browse/SERVER-5818

map reduce に慣れようとしているだけなら、 map-reduce の使用が本当に理にかなっているさまざまなシナリオを試すことをお勧めします

乾杯

于 2013-01-29T09:22:53.423 に答える