繁体   English   中英

Firestore 查询多个父文档的所有子集合

[英]Firestore query all subcollections of multiple parent documents

我在 Cloud Firestore 中有以下简化的数据架构:

[Users Collection]
-> "UserID1" { "displayName": "Luke", "profileImage": "someURL" }
-> "UserID2" { "displayName": "Han", "profileImage": "someURL" }

[Teams Collection]
-> "TeamId1" { "name": "Some Team Name", "members": ["UserId1", "UserId2"] } 
--> [Todos Collection]

我现在想向用户展示他团队的所有“Todo”文档,但我不知道什么是最好的方法。

1.采集组查询-按团队ID查询

为此需要两个查询。 每个 Todo 文档都可以有父团队 ID,并由集合组查询检索,例如 -> collectionGroup("todos").where("teamId", "in", ["teamId1", "teamId2", "teamId3"])

到目前为止,这对我来说是最好的解决方案,但缺点是“IN”查询有 10 个值的限制https://firebase.googleblog.com/2019/11/cloud-firestore-now-supports -查询中.html

2. 收藏组查询——按user-id查询

这里每个待办事项文档将从团队文档中获取用户数组。 查询很简单: -> collectionGroup("todos").where("members", "arrayContains", "userId1")

但是你必须在用户离开团队后维护数组,例如或当新的团队成员加入时。 3. 非规范化数据——每个用户得到待办事项的一个子集合

好吧,这有点过头了:)而且维护工作量比 2 还要多。

对于我的问题,是否有另一种数据建模方法或某种最佳实践?

数据没有最佳实践。 您需要知道,构建 Cloud Firestore 数据库没有“完美”、“最佳”或“正确”的解决方案。 但是,我们通常会根据要执行的查询来构建 Firestore 数据库。

因此,如果其中一个查询完成了工作,那么您可以提前 go。 如果第一个有一些限制,那么使用第二个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM