首页 > 解决方案 > Firestore:如何查询集合中的多个动态值

问题描述

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

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

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

这是数据库结构:

用户收藏:

在此处输入图像描述

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

在此处输入图像描述

这是所有渔获物所在的集合:

在此处输入图像描述

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

我想我应该在他打开该视图时获取用户朋友 ID,将它们存储在一个数组中,然后为通过该数组的每个循环进行新的数据库调用,但这感觉不是一个好的解决方案,它可能也需要长。

我还想过有一个云函数,它在朋友之间维护一个记分牌作为它自己的集合,每当有新的捕获时更新它,但这不起作用,因为新朋友可以加入该组并且不会成为其中的一部分列表。

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

标签: firebasegoogle-cloud-firestore

解决方案


我认为维护提要列表是个好主意。每当用户成为新朋友时更新列表的云函数(该函数可以将新朋友的所有帖子添加到他们自己的列表中)。

对于每一个新的或取消好友,云功能都可以在列表中添加或删除帖子。

出于某种原因,我读到你有一些组的概念。重读它你不会,但会留在这里以获得可能的灵感。根据您认为每个人将拥有多少朋友,也许您可​​以考虑添加每个朋友的 UID 而不是组 ID:

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

因此,如果我在 A、B 和 C 组中,我未来的所有捕获都将包含 A、B 和 C,当您按组查看时,您只需查询数组包含该组 ID 的所有捕获。

当用户形成或加入一个组时,获取 ID 并将其添加到该用户的所有渔获中(如果不需要较旧的数据并且您有优秀的渔民,您可以在过去 X 天内完成所有渔获或限制为最后 N 个渔获!)。

为了在用户离开组时保持更新,您只需要调用哪些项目将该用户作为所有者,并拥有一个包含他们所在组的组数组。提取该组 ID。

您只需侦听即可完成这 3 个云功能:新捕获、加入群组、离开群组。或更少的功能取决于您存储组的方式!


推荐阅读