0

複数のコレクションがあり、両方のコンテンツに基づいて mapReduce を介して単一の情報コレクションを作成しています。私のreduceメソッドでは、ソースコレクションに基づいて条件付きロジックを適用する方法、または出力コレクションからの既存のキーである場合にどのように適用できますか。

コレクション A を情報コレクションに減らす場合:

  • 入力コレクションに固有のフィールドのサブセットから値を合計し、それらのフィールドを上書きしたいと考えています。情報コレクション内の既存のキーの値を合計に含めたくありません。
  • キーが情報コレクションに存在する場合、それらのフィールドだけを上書きし、キーが存在する場合は他のフィールドの値を保持したいと考えています。

コレクション B を情報コレクションにマージする場合:

  • コレクション B のフィールドのサブセットで条件付きで上書きしたい
  • キーが存在する場合、他のフィールドの値を保持します。

現在、私は次のことを試しています:

  • 均一な値を出力するソース コレクションごとに map 関数があります。発行された値には、それがどのコレクションからのものかを示す「ソース」フィールドがあります。
  • 私は単一のreduce関数を持っています。最初に行うことは、uniform 値のように構造化されたオブジェクトを作成することです。
  • ソース フィールドを 'final' に設定し、既存のキーを示すファイナライズ関数があります。
  • reduce 関数はソース値をチェックし、使用するロジックを識別しようとします。Collection A の場合は合計、B の場合は置換、Final の場合はマージ ロジックに従おうとします。
  • reduce オプションを使用して mapReduce を実行し、キーを更新します。

問題

  • 最近、ファイナライズが複数回呼び出されることに気付きました。これにより、reduce でどのロジックを適用する必要があるかを識別する能力が失われます。

  • ソース コレクションに基づいて条件付きロジックを適用するにはどうすればよいですか?

4

1 に答える 1

0

ソース コレクションに基づいて条件付きロジックを適用するにはどうすればよいですか?

これを行うには、reduce() に送信されるデータに「情報」コレクションのデータを含める必要があります。このために、「reduce」アクションで出力します。アクションを使用したコレクションへの出力を参照してください。コレクション A (または B) からデータを削減した後、「削減」アクションは Mongo に、出力コレクション内のこのデータとレコードの共通部分を (キーによって) 削減するように指示します。

map() が "information" コレクションに既に存在するキーを生成する場合、reduce は新しいレコード (A または B から) と既存のレコード ("information" から) に対して実行されます。明らかに、これは reduce 関数がより複雑になることを意味しますが、少なくとも条件付きロジックを適用するために必要なすべてのデータを持っています。

于 2013-05-03T00:38:36.967 に答える