2011-12-05 74 views
1

假設我在我的藏品中有'電影'物品。電影有很多演員,演員屬於很多電影。許多一對多。MongoDB:從子數組創建另一個集合? (多對多的關係)

如何創建另一個由唯一的「actor」元素組成的集合?請記住,一些演員將被列入多部電影中。

{ 
    "_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數據庫分拆並創建一個單獨的演員集合?看起來這最好是通過你創建的函數來完成,你用哪種語言來與mongo進行交互,或者通過mongo上的js函數進行交互。 – Petrogad

+0

@Frederico就是這樣,是的。我想甚至打擾創建一個單獨的集合的主要原因是因爲Mongo目前無法返回查詢匹配的嵌套數組元素。例如,如果我想查詢所有名爲「Johnny」的演員的當前電影集合,而我可以獲取所有返回的具有演員姓名約翰尼的電影文檔,但我無法獲取該元素的演員信息匹配,即:'Johnny Depp','Johnny Carson'等。這個功能應該在Mongo v2.1.1中發佈(請參閱:https://jira.mongodb.org/browse/SERVER-828) – k00k

回答

0

這可以在客戶端應用程序來完成,而且通過在MongoDB中聚集 - 例如,你可以運行與輸出集合MapReduce工作。在地圖步驟中,給定一個電影文檔,您可以發出(actor.guid,{[其他演員細節]})的鍵值對,並且在縮小步驟中只返回一組細節(您還可以統計數字如果你想的話,演員在這一點上的電影)。

http://www.mongodb.org/display/DOCS/MapReduce有更多的語法信息。

相關問題