为了账号安全,请及时绑定邮箱和手机立即绑定

Nosql模型结构

Nosql模型结构

鸿蒙传说 2023-03-02 15:17:43
您将如何构建您的 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 数据库)
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

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

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

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

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

因此,您无法查询集合以一次性查找所选球队是主队或客队的所有比赛。

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

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

但是,根据 Frank van Puffelen对同一主题的回答:

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

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

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

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

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


查看完整回答
反对 回复 2023-03-02
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信