0

私が苦労している設計上の決定の例を挙げたいと思います:

「To Do リスト」アプリケーションがあり、各リストが MongoDB ドキュメントとして定義され、その項目が埋め込みコレクションとして定義されているとします。

これは非常に簡単ですが、一種の「フォーク」機能を追加して、友人が私のドキュメントをコピーし、元のドキュメントに変更を加えるたびにアイテムが自動的に同期されるようにしたいと考えています。

つまり、リスト内のアイテムを追加、名前変更、削除、または並べ替えると、アイテムをチェック/チェック解除したままリストを更新できます。

ここにいくつかのアイデアがありますが、私は MongoDB を初めて使用し、それぞれの実装がどれほど難しいかわかりません。これは望ましいことであり、発生する可能性のあるすべての問題を確認することはできません。

  • RDBMS の方法:項目を個別のコレクションとして保持し、それぞれがリストに埋め込まれた「チェック済み/未チェック」項目によって参照されます (本質的に多対多の関係)。
  • 元のアイテムを参照する:埋め込まれたコピーされた各アイテムは、元のドキュメントの対応するアイテムを参照します。これにより、元のアイテムの名前が変更されたか、削除されたか、または新しく追加されたかがわかります。

ソリューションの決定に役立つ洞察を提供できる人はいますか?

アップデート:

ユーザー エクスペリエンスの一部として、コピーされたドキュメントの所有者にリストを更新するかどうかを決定させたいので、最初の実装ではうまくいかないと思います。

しかし、2 番目の方法で変更を追跡するにはどうすればよいでしょうか。

4

1 に答える 1

1

最初のアプローチに従うことを強くお勧めします。たとえば、これがアイテムの場合:

{
   "_id" : 123,
   "Name" : "Feed the cat"
}

次のような todo リスト ドキュメントを作成します。

{
   "_id" : 1,
   "items" : [ 123, ... ]
}

これをお勧めする理由は、頻繁に変更される埋め込みドキュメントの同期を維持するのが非常に難しいためです。埋め込みドキュメントがあちこちに表示される場合は、ドキュメントの信頼できるバージョンを 1 つ用意してから、そのドキュメントの ID にリンクするだけの方がはるかに簡単です。

これにより、コピーされた todo リストが元の項目リストから分岐することも可能になります。それらは別のコレクションへの単なる参照です。必要なものをすべて追加/削除/編集できます。

于 2013-03-23T17:41:49.817 に答える