firebase - 我可以根据 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 有集合组,但它们似乎要求所有集合具有相同的名称。我想我可以使用它,但我认为我需要重组我的数据,可能会添加一个层次结构级别,例如“活动”、“距离”和“时间”,每个都有一个包含当前集合的数据文档。
有没有什么有效的方法可以通过重组我的数据来完成这个查询?
解决方案
单个 Firestore 读取操作只能从单个集合中读取文档,或者从具有相同名称的所有集合中读取文档。没有办法以其他方式从多个集合中读取。通常的解决方法是对每个集合执行单独的读取,然后将结果合并到您的应用程序代码中。
但在这里我会考虑将单个用户的所有活动类型存储在单个子集合中,并给他们一个activityType
字段。使用 Firestore 的独特优势之一是查询的性能不取决于它需要考虑的文档数量,因此在单个子集合中组合活动确实没有任何损失。
推荐阅读
- vis.js - 使用 Vis.js 网络预定义布局
- python - 如何在 Python 中制作对称三对角矩阵?
- azure-iot-hub - 在 Python 中使用基于 X509 CA 的证书的 Azure IoTHub_Client
- swift - 如何通过 objectMapper 和 Alamofire 发布嵌套的 json?
- r - 提取 .pdf 表
- tfs - TFS 如何从代码审查中排除 DLL 和代码注释/空格
- documentation-generation - 使用 asciidoc,是否可以将单个单词标记为源代码而不是整行?
- oop - “t1.__index = t2”和“setmetatable(t1, {__index = t2})”有什么区别?
- python - 如何解决“操作错误无法打开数据库文件”?
- jquery-file-upload - jQuery 文件上传 恢复文件上传