2011-12-05 7 views
1

私のコレクションに以下のような「フィルム」オブジェクトがあるとします。映画には多くの俳優があり、俳優は多くの映画に所属しています。多対多。MongoDB:サブアレイから別のコレクションを作成しますか? (多対多の関係)

ユニークな「アクタ」要素で構成される別のコレクションを作成するにはどうすればよいですか?いくつかの俳優は複数の映画に掲載されることを忘れないでください。

{ 
    "_id" : ObjectId("4edcffa5f320646bc8bd76b4"), 
    "directed_by" : [ 
     "John Gilling" 
    ], 
    "forbid:genre" : null, 
    "genre" : [ ], 
    "guid" : "#9202a8c04000641f8000000000b02e5d", 
    "id" : "/en/pirates_of_blood_river", 
    "initial_release_date" : "1962", 
    "name" : "Pirates of Blood River", 
    "starring" : [ 
     { 
      "actor" : { 
       "guid" : "#9202a8c04000641f800000000006823e", 
       "id" : "/en/christopher_lee", 
       "name" : "Christopher Lee", 
       "lc_name" : "christopher lee" 
      } 
     }, 
     { 
      "actor" : { 
       "guid" : "#9202a8c04000641f80000000001de22e", 
       "id" : "/en/oliver_reed", 
       "name" : "Oliver Reed", 
       "lc_name" : "oliver reed" 
      } 
     }, 
     { 
      "actor" : { 
       "guid" : "#9202a8c04000641f80000000003b41da", 
       "id" : "/en/glenn_corbett", 
       "name" : "Glenn Corbett", 
       "lc_name" : "glenn corbett" 
      } 
     } 
    ] 
} 
+1

現在のmongo dbを使用して別のアクターコレクションを作成したい場合は、これは、あなたがmongoとやりとりするために使っている言語や、mongoのjs関数を使って作成した関数を通して、これが最もうまくいくようです。 – Petrogad

+0

@Fredericoそれはかなりそうです、はい。別のコレクションを作成することを迷惑にしている主な理由は、Mongoがクエリと一致するネストされた配列要素を返すことができないためです。たとえば、 "Johnny"という名前のすべての俳優の現在の映画コレクションを検索したい場合、返されたすべての映画のドキュメンタリを取得できますが、Johnnyという名前の俳優がいます。 'Johnny Depp'、 'Johnny Carson'などです。この機能はMongo v2.1.1(https://jira.mongodb.org/browse/SERVER-828を参照)に入っているはずです。 – k00k

答えて

0

これは、クライアントアプリで行われ、だけでなく、MongoDBの中に集約経由することができます - たとえば、あなたが出力コレクションとのMapReduceジョブを実行することができます。マップステップでは、映画ドキュメントを与えられて、(actor.guid、{[その他のアクター詳細]})のキー値ペアを出力できます。また、reduceステップでは、単一の詳細セットが返されますあなたが望むなら、この時点で俳優がいた映画のこと)。

http://www.mongodb.org/display/DOCS/MapReduceには構文に関する情報があります。