2013-07-09 81 views
0
public Class Team{ 
    @Id 
    String id; 
    String name = ""; 
} 

public Class Player{ 
    @Id 
    String id; 
    String team_id = ""; 
    String name = ""; 
} 

我應該在MongoDB上執行「查找」,讓團隊與玩家關聯嗎? 我使用了以下內容:Jongo如何加入集合

Iterator<Player> plist = Player.findAllIter(); 
while (plist.hasNext()) { 
    Player p = plist.next(); 
    Team t = p.getTeam(); 
} 

凡在本級球員,我有:

public static Iterator<Player> findAllIter() { 
    return players().find().as(Player.class).iterator(); 
} 

public Team getTeam() { 
    Team t = Team.findById(this.team_id); 
    return t == null ? new Team() : t; 
} 

這是正確的嗎?有更好的解決方案嗎?

+1

它的功能。 :)可能有更高效的解決方案,但由於MongoDB本身沒有「加入」或「包含」樣式功能,因此您需要將自己的解決方案收集到相關的文檔中。我建議你考慮做更多的「團隊」緩存,並可能使用「$ in」一次(批量)獲取多個團隊。 – WiredPrairie

+0

也許這可以幫助:http://stackoverflow.com/a/19790715/643302 – Thomas

回答

0

由於MongoDB是一個文檔數據庫,您可以將關係存儲在文檔中或手動解析它們。

請參閱MongoDB References

的MongoDB不支持聯接。在MongoDB中,一些數據是非規範化的,或者將相關數據存儲在文檔中以消除對連接的需求。但是,在某些情況下,將相關信息存儲在單獨的文檔中通常在不同的集合或數據庫中是有意義的。

該站點上也指出,你有兩個選擇:

  1. 手冊參考
  2. DBREFS

我自己平時手動和從未解析引用曾與任何問題。無論您是否可以使用DBRefs,都取決於您的數據庫驅動程序,所以我堅持使用手冊。