Nosql模型结构

时间:2019-07-03 07:45:51

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

您将如何构建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 db)

1 个答案:

答案 0 :(得分:1)

  

我需要查询“游戏”集合,并找到所选球队是主队还是客队的所有比赛。

关于这种查询,Cloud Firestore官方文档非常明确。不幸的是,谈到Firestore,有一些query limitations

  

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

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

因此,您无法查询集合来查找所选团队是一次主队或客队的所有游戏。

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

对于Android,这是您可以在本地合并两个查询的方式:

但是,根据弗兰克·范·普菲伦(Frank van Puffelen)的answer,关于同一主题:

  

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

您可以等待此功能可用,或者可以使用上面的我的解决方案。

  

我该在firestore生成的ID处引用团队吗?还是应该输入团队名称?

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

P.S。如果您不是在"OR"查询中查询"AND",请注意,允许链接多个whereTo()调用。