多くの点で、meteorのAPIはフラットなリレーショナルドキュメントを推奨しますが、MongoDBは非リレーショナルデータストアです。残念ながら、この競合は開発者が解決するための演習として残されています。
スキーマ構造と結合の概念は、単一の回答内でカバーするための非常に大きなトピックであるため、可能な限り簡潔にするように努めます。
リレーショナルモデルを選択する理由
コメントと投稿データがあると仮定します。投稿にコメントを埋め込んだらどうなるか考えてみてください。
-
DDPはドキュメントを操作します。同じ投稿に新しいコメントが追加されるたびに、すべてのコメントが送信されます。
-
allow
およびdeny
ルールはドキュメントに作用します。同じルールが投稿とコメントの両方に同時に適用されると期待するのは不合理かもしれません。 -
出版物は、コレクションの観点からより意味をなす傾向があります。上記のシナリオでは、投稿とは関係なくコメントのリストを簡単に公開することはできませんでした。
-
リレーショナルデータベースは、正当な理由で存在します。それらの1つは、2番目のソリューションに固有の複数の変更の問題を回避することです。
埋め込みモデルを選択する理由
- 結合はMongoDBでネイティブにサポートされておらず、リアクティブ結合を生成するためのコアパッケージはありません。
推奨事項
3番目のソリューションを使用します。私の経験では、リレーショナルモデルを選択する理由は、データストアによって課せられる制限をはるかに上回っています。もちろん、結合の欠如を克服することは簡単ではありませんが、苦痛はほんの一握りの公開機能に限定される可能性があります。これが私が強くお勧めするいくつかのリソースです:
-
EventedMindで多対多の関係を公開する方法。クリスはあなたの正確なユースケースを詳細にカバーしていますが、彼は手動で監視コールバックを使用してリアクティブ結合を行います。これはお勧めしません。
-
DiscoverMeteorEncyclopediaからmeteorにリアクティブに参加します。これは、リアクティブ結合を行う方法と理由の基本をカバーしています。
-
DiscoverMeteorの非正規化の章。これは、私が上で述べた多くのポイントをカバーし、データの一部を非正規化する時期と方法についても説明します。
-
リレーションを使用して公開を使用して、データを結合できます。代替パッケージには、スマート公開、複合公開、および単純公開が含まれます。
これ以上の情報が必要な場合は、以下にコメントしてください。回答を更新します。