【问题标题】:Jongo how to join collectionsJongo如何加入收藏
【发布时间】:2013-07-09 13:35:58
【问题描述】:
public Class Team{
   @Id
   String id;
   String name = "";
}

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

我应该在 MongoDB 上执行“查找”以使团队与玩家相关联吗? 我正在使用以下内容:

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

我在 Player 类中的哪个位置:

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;
}

这是正确的吗?有没有更好的解决方案?

【问题讨论】:

  • 它很实用。 :) 有可能更有效的解决方案,但由于 MongoDB 本身没有“加入”或“包含”样式功能,因此您需要推出自己的解决方案来收集相关文档。我建议您考虑对Teams 进行更多缓存,并可能使用$in 一次(分批)获取多个团队。
  • 也许这会有所帮助:stackoverflow.com/a/19790715/643302

标签: java mongodb join jongo


【解决方案1】:

由于 MongoDB 是一个文档数据库,您可以将关系存储在文档中,也可以手动解决它们。

请看MongoDB References:

MongoDB 不支持连接。在 MongoDB 中,一些数据是非规范化的,或者与相关数据一起存储在文档中以消除对连接的需要。但是,在某些情况下,将相关信息存储在单独的文档中是有意义的,通常是在不同的集合或数据库中。

同一个网站还声明你有两种选择:

  1. 手册参考
  2. DBRefs

我自己通常手动解决引用问题,并且从来没有遇到过任何问题。是否可以使用 DBRefs 取决于您的 DB 驱动程序,所以我建议坚持手动操作。

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多