Firestore:如何查询集合中的多个动态值

时间:2019-09-24 10:50:41

标签: firebase google-cloud-firestore

我正在构建一个“与朋友一起钓鱼”应用程序,该程序可以让用户创建用于钓鱼的共享记分板。每个用户都可以为自己的日志记录分数。我目前将所有分数保存在一个名为catchLog的集合中。对于单个用户自己的日志,我只查询记录的捕获具有其ID的位置。

每个用户还可以邀请朋友。然后,每个用户都有一个带有朋友ID的“朋友”子集合。

但是,现在,我正在努力思考如何在过滤用户的朋友的同时显示具有与catchLog不同的值的共享记分板。

这是数据库结构:

用户集合:

enter image description here

这是friends子集合(这些ID与那些uid的朋友的ID相同),并且此人只有一个朋友。 -

enter image description here

这是所有渔获物归类的集合:

enter image description here

我不确定如何解决此问题。我认为无法使用要在集合中匹配的值列表来调用firestore SDK。

我认为当他打开该视图时,我应该得到一个用户朋友ID,将其存储在数组中,然后对该数组中的每个循环进行新的数据库调用,但这似乎不是一个好的解决方案,可能需要太长时间。

我还想到了一个Cloud Function,它可以在朋友之间维护一个计分板,因为它是它自己的收藏集,每当一个新的渔获物就更新它,但这是行不通的,因为一个新朋友可以加入该小组并且不会该列表的一部分。

我没有编写任何查询来尝试完成此操作,因为我确定我还没有想到的另一种方法可以完成此操作,因此正在征求建议:)非常感谢!

1 个答案:

答案 0 :(得分:2)

我认为维护一个提要列表是一个好主意。一个Cloud Function,它在用户成为新朋友时更新列表(该功能可以将新朋友的所有帖子添加到他们自己的列表中)。

对于每一个新朋友或不喜欢的朋友,云功能都可以在列表中添加或删除帖子。

出于某种原因,我读到这篇文章,您对分组有一些概念。重新阅读不是您想要的内容,但请留在此处以寻求灵感。根据您认为每个人会有多少个朋友,也许您可​​以考虑添加每个朋友的UID而不是组ID:

您可以将捕获的每条鱼的所有者(我认为是您的byID字段)与所有者一起存储。

因此,如果我在A,B和C组中,则所有将来的渔获物都将包含A,B和C,当您按组进行查看时,您只需要查询数组包含该渔获物的所有渔获物组ID。

当用户形成或加入一个组时,获取ID并将其添加到该用户的所有渔获中(如果不需要较旧的数据,您可以在最近X天进行所有渔获,也可以限制在最近N次捕捞中有好的渔民!)。

要在用户离开组时保持丢失状态的最新状态,您只需要调用哪些项目将该用户作为所有者,并拥有包含其所在组的组数组即可。请提取该组ID。

您只需听以下内容即可实现这3个云功能:新渔获物,加入小组,离开小组。或更小的功能取决于您存储组的方式!