0

たとえば、mongodbに2つのコレクションがあります。1つはユーザーの基本情報を含むユーザー用で、もう1つはアプリケーションを含むアプリ用です。ユーザーがアプリを追加できる場合は、次にログインしたときに、ウェブでユーザーが追加したアプリを取得する必要があります。彼らのために。mongodbでこの種のデータベースを構築するにはどうすればよいですか。

users:{_id:ObjectId(),username:'username',password:'password'}
apps:{_id:ObjectId(),appname:'',developer:,description:};

そして、どのように私は彼らのためにユーザーが追加したアプリを入手する必要がありますか?次のようなaddedAppIdのようなものを追加する必要があります:

users:{_id:ObjectId(),username:'username',password:'password',addedApppId:[]}

追加したアプリを示し、 addedAppIdを使用してアプリを取得します???

4

1 に答える 1

1

usersはい、あなたが示したように、ユーザーが追加したアプリを追跡するコレクションに問題はありません。

linkingこれはMongoDBで知られています。リレーショナルシステムでは、おそらくadded_apps、ユーザーID、アプリID、およびその他の関連情報を含む別のテーブルを作成します。ただし、参加できないため、この情報をusersコレクションに保持することは完全に適切です。

ドキュメントから:

MongoDBスキーマを設計する際の重要な問題は、いつ埋め込むか、いつリンクするかです。埋め込みとは、BSONドキュメント内にオブジェクトと配列をネストすることです。リンクはドキュメント間の参照です。

MongoDBには結合はありません。1,000サーバークラスターでは分散結合は困難です。埋め込みは、「事前に結合された」データに少し似ています。ドキュメント内の操作は、サーバーが簡単に処理できます。これらの操作はかなり豊富になります。対照的に、リンクはアプリケーションによってクライアント側で処理される必要があります。アプリケーションは、フォローアップクエリを発行することによってこれを行います。

(これはあなたがする必要がある余分なビットです、ユーザーの保存されたものからアプリ情報をフェッチしますAppId。)

一般に、エンティティ間の「含む」関係の場合、埋め込みを選択する必要があります。リンクを使用しないときにリンクを使用すると、データが重複する可能性があります。

..。

多対多の関係は、一般的にリンクによって行われます。

于 2012-08-07T01:51:30.273 に答える