1

私のアプリでは、ユーザーにはイベントとグループがあり、イベントはグループに所属できます (必須ではありません)。私はまだ非リレーショナル DB に慣れていないので、これを最適に構築するためのベスト プラクティスを知りたいです。

    var user = new mongoose.Schema({
        name: { type: String },
        events: [event],
        groups: [group]
    });

    var group = new mongoose.Schema({
        name: { type: String }
    });

これは私が混乱しているところです。

    var event = new mongoose.Schema({
        name: { type: String }
        groups: ????
    });

グループの ID への参照を含む配列を保持するだけですか?

その場合、グループごとにイベントを見つけるにはどうすればよいですか?

また、グループが削除された場合、各イベントを反復処理して参照を削除する必要がありますか?

4

1 に答える 1

5

mongodb では、2 つの選択肢があります。埋め込み (サブドキュメント) とリンク (別のコレクション)

埋め込みとリンク 各アプローチには長所と短所があります。

埋め込み: ドキュメント内にネストします。

たとえば、ドキュメントは次のようになります

{
    name : 'name',
    events: [a,b,c],
    groups: [1,2,3]
}
  • 関与するコレクションは 1 つだけなので、原子性が得られます。
  • ただし、値が重複する可能性があります

リンキング

ここでは、一種の外部キーでリンクします。ドキュメントを参照

1 つのコレクション内のドキュメントは、別のコレクション内のドキュメントを参照します。欠点は、アトミック操作が失われることです。ただし、重複を排除します。

グループを更新し、イベントを更新する必要があり、それらが別々のコレクションにある場合は、アトミックな更新を自分で処理する必要があります。Mongodb はそれを保証しません。

于 2012-11-27T23:33:07.407 に答える