我正在构建一个包含Users
,Sports Teams
和Articles
的应用。
user
可以跟随sports team
sports team
,users
articles
内的users
将成为投放人并发布sports team
以供关注者查看。
一百万articles
可以跟随相同的sports team
,但只有少数用户,例如10,可以发布Users
个特定Sports Teams
的贡献者。
阅读Firestore,我可能倾向于以下列方式构建我的数据:
E.g。结构
Posts
(Root Collection)
Sports Teams
(Root Collection)
Sports Teams
(子集)
根据我的理解,如果我要执行查询以列出所有where('contributingUsersIDs.someUserID', '==', true)
作为我的贡献者,我只需在Sports Teams
Datastore
上进行抓取。
问题:
你是如何做一个简单的查询来检索你作为特定用户遵循的所有ofy().load().keys(followingSportsTeamsIDsKeys).values()
文档的列表?在followingSportsTeamsIDs
我只需Sports Teams
。
正确的解决方案是简单地执行提取以检索用户拥有的所有db.collection("teams").document("someTeamID").getDocument
,然后如果说它们遵循千种不同的Firestore
来简单地执行Firestore
并提出请求对于客户端上的for循环中的每个ID?那似乎过分了?但也许不是因为{{1}}仍然是一个持久的连接?
或者,我打算如何重构{{1}}的数据?
答案 0 :(得分:0)
使用Cloud Firestore(暂时)无法一次获取多个文档。
您是对的,如果您必须在循环中执行请求,这些类型的连接可能变得非常低效。它并不像你为每个人分别进行单独的HTTP呼叫那么糟糕(如你所说,他们会共享一个连接),但它并不好。
相反,您可能想要复制一些数据。例如,如果您有一个用户可以看到他们关注的每个团队的屏幕,那么您可能只需要该屏幕上每个团队的团队名称。在这种情况下,您可以使用户看起来像这样:
{
username: "whatever",
teams: [
{
id: "team_1",
name: "Team One"
}
...
]
}
这是使用NoSQL数据库时必须做出的权衡之一。优化数据结构以了解其使用方式!