Firebase云Firestore设计

Firebase云Firestore设计,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我很难完成我正在开发的android应用程序的设计。我需要在三个主要组中存储数据;主持人、志愿者和活动。我遇到的问题是,大多数活动都会有多个志愿者,我不知道应该如何组织收集,以便我可以查询我的数据库,查找由主持人创建的所有活动以及每个活动中的所有志愿者 我目前有3个顶级收藏;主持人、志愿者和活动。然而,我想知道这是否是实现这一目标的最佳方式,有人能解释一下如何使用这种设计查询每个活动中所有志愿者的数据库吗 如果这不是最好的方法,那么如果有人能解释另一种方法及其工作原理,我将不胜感激 我目前有3个

我很难完成我正在开发的android应用程序的设计。我需要在三个主要组中存储数据;主持人、志愿者和活动。我遇到的问题是,大多数活动都会有多个志愿者,我不知道应该如何组织收集,以便我可以查询我的数据库,查找由主持人创建的所有活动以及每个活动中的所有志愿者

我目前有3个顶级收藏;主持人、志愿者和活动。然而,我想知道这是否是实现这一目标的最佳方式,有人能解释一下如何使用这种设计查询每个活动中所有志愿者的数据库吗

如果这不是最好的方法,那么如果有人能解释另一种方法及其工作原理,我将不胜感激

我目前有3个顶级收藏

这是构建云Firestore数据库的常用方法

有人能解释一下如何用这个设计查询每个活动中所有志愿者的数据库吗

可能的数据库结构可能是:

Firestore-root
  |
  --- volunteers (collection)
  |    |
  |    --- volunteerId (document)
  |          |
  |          --- //Volunteer properties
  |          |
  |          --- eventIds: ["generatedEventId", "generatedEventId"]
  |
  --- events (collection)
       |
       --- eventId (document)
             |
             --- //Event properties
如您所见,我已将
eventId
添加为
eventId
数组中的一个值,因为
志愿者可以参与多个活动。要获取每个活动中的所有志愿者,您可以使用以下查询:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference volunteersRef = rootRef.collection("volunteers");
Query query = volunteersRef.whereArrayContains("eventIds", "generatedEventId");
其中,
generatedEventId
是志愿者参与的活动的id


由于您没有为平台选择标记,我已经用Android编写了上述代码行,但也可以简单地为其他编程语言编写。

该查询是如何工作的?我理解第二行,但我不理解下一行是如何工作的。是的,我正在使用Android Studio。很抱歉,我应该把这个问题提出来。你说的是哪一行?最后一行。@NoahAnderson最后一行代码意味着你首先引用了
志愿者
集合,然后你试图找到志愿者参与的所有活动,对吗?哦,好吧,我想我明白你的意思了。基本上,志愿者集合中的每个文档都有一个数组,存储他们注册的每个事件,然后您将在事件集合中搜索具有匹配事件ID的事件。对吗?