首页 > 解决方案 > 我可以根据 id 列表获取一组 Firestore 集合中的所有文档吗?

问题描述

我有一个user收藏。每个用户都有一个不同名称的集合列表,即“活动”、“时间”、“距离”、“传感器-a”、“传感器-b”等。这些集合中每个文档的 id 是通用的。因此,例如,具有相同 id 的所有文档相互关联。

“活动”集合中的每个文档都有我要搜索的属性,而“时间”、“距离”和“传感器-x”文档大部分是各种传感器的数据点列表。例如,每个列表中的第一个元素相互对应,即 sensor-a[42] 是在 time[42]、distance[42] 和 sensor-b[42] 时的传感器读数。

所以数据看起来像这样:

user/100/activites/200
user/100/distance/200
user/100/time/200
user/100/sensor-a/200
user/100/sensor-b/200

user/100/activites/201
user/100/distance/201
user/100/time/201
user/100/sensor-a/201
user/100/sensor-b/201

我希望能够根据活动的某些属性过滤掉“活动”列表,然后从其他集合中获取与我过滤的具有相同 ID 的所有文档。

我知道我可以创建一个我感兴趣的 id 列表,然后一次简单地获取每个文档,但这似乎效率不高。

我知道 Firestore 支持一种in查询方法,但似乎限制为最多 10 个条目,即我过滤的活动列表需要为 10 或更少。

我还看到 Firestore 有集合组,但它们似乎要求所有集合具有相同的名称。我想我可以使用它,但我认为我需要重组我的数据,可能会添加一个层次结构级别,例如“活动”、“距离”和“时间”,每个都有一个包含当前集合的数据文档。

有没有什么有效的方法可以通过重组我的数据来完成这个查询?

标签: firebasegoogle-cloud-firestore

解决方案


单个 Firestore 读取操作只能从单个集合中读取文档,或者从具有相同名称的所有集合中读取文档。没有办法以其他方式从多个集合中读取。通常的解决方法是对每个集合执行单独的读取,然后将结果合并到您的应用程序代码中。

但在这里我会考虑将单个用户的所有活动类型存储在单个子集合中,并给他们一个activityType字段。使用 Firestore 的独特优势之一是查询的性能不取决于它需要考虑的文档数量,因此在单个子集合中组合活动确实没有任何损失。


推荐阅读