0

私は MongoDB を初めて使用します。マスター コレクションの user_group を 1 つ持っています。サンプル ドキュメントを以下に示します。

{group_name:"xyz","previlege":["Add","Delete"],...}

および 2 番目のコレクション user_detail

{"user_name":"pt123","group_name":"xyz",...}

これら 2 つのコレクション間の関係を維持するにはどうすればよいですか? user_group から user_detail への参照またはその他の代替手段を使用する必要がありますか?

4

3 に答える 3

1

簡単な答え: ありません。
MongoDB を見始めると、設計哲学全体が変わります。もし私があなたならprevilege、user_detail ドキュメント自体の中にフィールドを保持します。

{"user_name":"abc","group_name":"xyz","previlege" : ["add","delete"]}

ただし、グループ権限を変更し続ける場合、これは理想的ではない場合があります。しかし、アイデアは、1 つの「レコード」のすべての情報を 1 つのオブジェクトに格納できるように、データ ストレージを設計することです。

于 2013-07-10T12:39:18.007 に答える
0

NoSQL である MongoDB には明示的な結合がありません。回避策は可能ですが、推奨されません (MapReduce を参照)。

最善の策は、クライアント側の mongo コレクションから両方のドキュメントを取得し、ユーザー固有の権限を適用することです。user_group コレクションの group_name にインデックスがあることを確認してください。

または、クライアント側で結合を適用した後、ユーザーのアクセス許可 [read、del など] を同じドキュメントに保存することをお勧めします。ただし、不変条件が壊れる可能性があるため、コレクションを外部から更新することはできません。ユーザー グループへの更新が発生するたびに、クライアント側でそれらのアクセス許可 (特権) を自分で適用し、それらの特権を同じドキュメントに保存する必要があります。書き込みには問題が生じる可能性がありますが、読み取りは高速になります (ユーザー名など、いくつかのフィールドがインデックス化されていると仮定します)。

于 2013-07-10T12:55:36.203 に答える