2013-07-09 3 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 нет встроенных функций стиля «join» или «include», вы должны использовать собственное решение для сбора связанных документов. Я бы посоветовал вам подумать о том, чтобы больше кэшировать «Команды» и потенциально использовать «$ in» для извлечения нескольких команд одновременно (в партиях). – WiredPrairie

+0

Возможно, это может помочь: http://stackoverflow.com/a/19790715/643302 – Thomas

ответ

0

Поскольку MongoDB - это база данных документов, вы либо храните отношения внутри документа, либо разрешаете их вручную.

Пожалуйста см MongoDB References:

MongoDB не поддерживает соединения. В MongoDB некоторые данные денормализуются или хранятся со связанными данными в документах, чтобы удалить необходимость объединения. Однако в некоторых случаях имеет смысл хранить связанную информацию в отдельных документах, как правило, в разных коллекциях или базах данных.

Тот же сайт также утверждает, что у вас есть два варианта:

  1. Ссылки на Руководство
  2. DBRefs

Я сам обычно разрешить ссылки вручную и никогда не было никаких проблем с этим. Если вы можете использовать DBRefs, это зависит от вашего DB-драйвера, поэтому я просто предлагаю руководство.

Смежные вопросы