4

2 つのコレクションを持つ MongoDB データベースがあります。

  • グループ: { group_slug, members }
  • ユーザー: { ID、表示名、グループ }

グループに対するすべての変更は、グループの members 配列を変更してユーザー ID を含めることによって行われます。

map/reduce を使用して、これらの変更を users コレクションに同期したいと考えています。map/reduce の結果を既存のコレクションに出力するにはどうすればよいですか (ただし、マージや削減はできません)。

私の既存のコードはここにあります: https://gist.github.com/morgante/5430907

4

1 に答える 1

2

map/reduce の結果を既存のコレクションに出力するにはどうすればよいですか

あなたは本当にこのようにすることはできません。また、これは実際に推奨される動作でもありません。他の解決策があります:

解決策 1:

  • map/reduce を一時コレクションに出力する
  • 一時コレクションからプライマリ データ ストアを更新するフォローアップ タスクを実行します。
  • 一時コレクションのクリーンアップ

正直なところ、これはこれを行う安全な方法です。ループ全体にいくつかの基本的な再試行ロジックを実装できます。

解決策 2:

  • 変更をキューに入れます。(つまり、「ユーザーがグループにサブスクライブする」 )
  • キューでそのようなイベントをリッスンしている個別のワーカーから両方のテーブルを更新します。

このソリューションには別の部分 (キュー) が必要になる場合がありますが、大規模なシステムではこのような非正規化の問題が発生します。したがって、これはあなたがこれを見る唯一の場所ではありません。

于 2013-04-22T07:35:03.927 に答える