您将如何构建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)
我需要查询“游戏”集合,并找到所有选定球队为主队或客队的比赛。
关于此类查询,Cloud Firestore官方文档非常明确。不幸的是,当涉及到Firestore时,存在一些查询限制:
Cloud Firestore不支持以下类型的查询: 逻辑或查询。在这种情况下,您应该为每个OR条件创建一个单独的查询,并将查询结果合并到您的应用中。
Cloud Firestore不支持以下类型的查询:
所以,你不能查询集合找到所有的游戏中选择的球队 无论是 在单去主队或客队。
一种工作是将您的数据库查询两次,并在客户端合并这些查询的结果。这不是完美的,因为您需要查询两次,但我认为它将成功。
对于Android,这是您可以在本地合并两个查询的方式:
但是,根据弗兰克·范·普菲伦(Frank vanPuffelen)关于同一主题的回答:
OR查询,因为那些查询将需要跳过索引,这将无法保证性能。请注意,正在努力支持可能的IN查询的子集,以便您可以查询诸如“给我提供泰国或意大利美食的所有餐厅”之类的信息。
您可以等到此功能可用,或者可以使用上面的我的解决方案。
我应该在那里找到由Firestore生成的ID对团队的引用吗?还是应该输入团队名称?
在大多数情况下,我们通常使用用户ID而不使用名称,原因是名称可以更改,而ID则可以更改。但是,由您决定是否最好使用名称而不是ID进行搜索。
附注:如果您查找的不是"OR"查询"AND"查询,请注意,whereTo()允许链接多个呼叫。
"OR"
"AND"
whereTo()