我可以在一组基于id列表的Firestore集合中获得所有文档吗?



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

在"活动"集合有我要搜索的属性,而"时间"、"距离"one_answers"传感器"。文档在很大程度上是各种传感器的数据点列表。例如,每个列表中的第一个元素彼此对应,即sensor-a[42]是传感器在时间[42],距离[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有集合组,但它们似乎要求所有集合具有相同的名称。我认为我可以使用这个,但我认为我需要重构我的数据,可能需要添加一个层次结构,例如"活动"、"距离"one_answers"时间"。每个集合都有一个包含当前集合的数据文档。

是否有任何有效的方法,我可以做这个查询重组我的数据?

单个Firestore读取操作只能从单个集合读取文档,或者从所有具有相同名称的集合读取文档。否则无法从多个集合中读取。典型的解决方法是对每个集合执行单独的读取,然后将结果合并到应用程序代码中。

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

最新更新