【问题标题】:Nosql model structureNosql模型结构
【发布时间】:2021-11-28 07:59:28
【问题描述】:

您将如何构建您的 Cloud Firestore 数据库。

我收藏了团队、竞技场和游戏:

public class Team {
    public String name;
    public String homeCourtId;
}

public class Game{

    public String matchId;
    public String date;
    public Arena arena;
    public Team homeTeam;
    public Team awayTeam;
}


public class Arena {

    public String name;
    public String phone;
    public String email;
    public String address;
    public String postalCode;
    public String city;
    public String district;
    public String cordLat;
    public String cordLong;

}

在游戏中,一支球队可以是主队或客队,而一场比赛总是有一个竞技场。

因此,目前我的想法是在所有游戏都进入游戏集合时构建它,当我想查找团队的所有游戏时,我需要查询游戏集合并查找所选团队是主队或客队。

我应该通过 Firestore 生成的 id 引用团队,还是应该使用团队名称?有什么指针可以让我了解更多相关信息吗?

他们是在 Firestore 中构建我的数据的更好方法吗? (或任何 nosql 数据库)

【问题讨论】:

    标签: java android firebase google-cloud-firestore nosql


    【解决方案1】:

    我需要查询 Games 集合并查找所选球队是主队或客队的所有比赛。

    Cloud Firestore 官方文档对这种查询非常明确。不幸的是,有一些 query limitations 涉及到 Firestore:

    Cloud Firestore 不支持以下类型的查询:

    • 逻辑或查询。在这种情况下,您应该为每个 OR 条件创建一个单独的查询,并在您的应用中合并查询结果。

    因此,您无法通过查询集合来查找所选球队是要么主队或单场客队的所有比赛。

    一种解决方法是查询您的数据库两次并在客户端合并这些查询的结果。它并不完美,因为您需要查询两次,但我认为它可以解决问题。

    对于 Android,您可以通过以下方式在本地合并两个查询:

    但是,根据 Frank van Puffelen 的 answer 关于同一主题:

    OR 查询,因为这些查询需要跳过索引,这将无法保证性能。请注意,我们正在努力支持可能的 IN 查询的子集,以便您可以查询诸如“给我所有提供泰国或意大利美食的餐厅”之类的内容。

    您可以等到此功能可用,也可以使用我上面的解决方案。

    我应该通过 firestore 生成的 id 引用团队,还是应该使用团队名称?

    在大多数情况下,我们通常使用用户 ID 而不是名称,原因是名称可以更改,而 ID 不会。但您可以决定按名称搜索是否比按 ID 搜索更好。

    附:如果您正在查找而不是 "OR" 查询 "AND" 查询,请注意允许链接多个 whereTo() 调用。

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多