スキーマ設計に関するMongoドキュメントは、良い出発点を提供するはずです
。http ://www.mongodb.org/display/DOCS/Schema+Design
埋め込みとリンクに関するセクションと、実装を含む例があります。両方の。
埋め込みとリンクのテーマでStackOverflowについて尋ねられた別の質問があります。これには、非常に詳細な回答が含まれています
。MongoDBの関係:埋め込みまたは参照?
「Mongoでのデータの更新」というタイトルのMongoドキュメントには、ドキュメントの埋め込みと参照ドキュメントに関するセクションも含まれています:
http ://www.mongodb.org/display/DOCS/Updating+Data+in+Mongo
上記のリンクは、ドキュメントの埋め込みと参照の違いについて非常によく理解し、スキーマ設計のためのいくつかの良いアイデアを提供するはずです。
特定の例では、同じ製品が好きなユーザーを検索しているように見えます。考えられる解決策の1つは、各ユーザーが好む製品IDの配列を含めることです。
> db.users.find()
db.users.save({ "_id" : 1, "name" : "Joe", "LikesProducts":[2,4,56,57] });
db.users.save({ "_id" : 2, "name" : "Jane", "LikesProducts":[1,4,56,57] });
製品56と57の両方が好きなユーザーを見つけるには、次のクエリを実行できます。
> db.users.find({LikesProducts:{$all:[56,57]}})
{ "_id" : 1, "name" : "Joe", "LikesProducts" : [ 2, 4, 56, 57 ] }
{ "_id" : 2, "name" : "Jane", "LikesProducts" : [ 1, 4, 56, 57 ] }
>
$ all演算子の詳細については、「高度なクエリ」のドキュメントをご覧ください:
http ://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all
次に、アプリケーションは、両方のユーザーの「LikesProducts」配列に表示される他の製品(存在する場合)を判別できます。
うまくいけば、これはあなたのアプリケーションのために考慮すべきいくつかのアイデアをあなたに与えるでしょう。他にご不明な点がございましたら、コミュニティがお手伝いします。