0

MapReduce を使用すると、結果として得られる各ドキュメントの「結果」は次のように構造化されます。

{ '_id'   : 123, 'value' :{'sum_donations' 999, 'nbr_visitors':50 }    

以下を使用して _id および value フィールドにアクセスできます。

db.result.find() OR db.result.find({},{_id:1, value:1})

nbr_visitorsを選択せず​​に_idsum_donationsを選択する方法はありますか? このようなもの:

{'id': 123, 'sum_donation': 999}

それとも、それを返す別の MapReduce 関数を作成する必要がありますか?
MapReduce コレクションを 1 つ用意し、それを操作してさまざまな質問に回答することを考えていました。
私は試した

db.result.find({},{_id:1, value.sum_donations:1})  but it didn't work.
4

1 に答える 1

1

これを行うには 2 つの問題があります。

  • MRのvalueフィールドは現在、MR 自体の atm から操作することはできません。そのための JIRA がありますが、正確には「リスト」にはありません: https://jira.mongodb.org/browse/SERVER-2517
  • Mongo のクエリ言語は、フィールドを最上位のドキュメントに自動的に射影することはできません。サブ文書フィールドは、サブ文書に残ります。

(MongoDB 2.2 を使用している場合) ここで集約フレームワークを$projectオペレーターと共に使用することもできますが、これは非常にやり過ぎであり、システムとプログラムの速度が低下すると思います。

したがって、この atm を実行する最善の方法は、プログラミングを拡張して、そのサブドキュメントからフィールドを取得することです。これはおそらく、この atm を実行するための最もパフォーマンスが高く、直接的で最も簡単な方法であり、単にコードを記述するだけです。

于 2012-09-05T15:38:53.380 に答える