【问题标题】:Getting posts from people I follow using Firestore使用 Firestore 从我关注的人那里获取帖子
【发布时间】:2018-01-23 16:29:44
【问题描述】:

我在我的移动应用上使用 Cloud Firestore。我想从我关注的用户那里获取内容。现在那些:

所以我正在尝试以下查询来从我关注的人那里获取内容。

ref = FirebaseFirestore.getInstance().collection("topics");
ref.whereEqualTo("username","user1");
ref.whereEqualTo("username","user2");

但是当我使用这个查询时,它只显示来自第一个用户 (user1) 的帖子。

如果我关注 10K 用户会怎样。从他们那里获取最新帖子的最佳方式是什么?

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    Firestore 不支持您尝试执行的那种查询。您假设添加更多对 whereEqualTo() 的调用都将像逻辑 OR 一样应用,并且将返回与任何条件匹配的任何文档。在 Firestore 中,添加更多条件是一个逻辑 AND,这意味着 所有 条件必须为真才能匹配文档。

    您将不得不重组您的数据库以支持您想要执行的查询类型。这对于 noSQL 类型的数据库非常常见。没有一个单一的结构可以支持所有类型的查询。在您的情况下,您需要记录每个用户他们关注的其他用户,并查询以获得您想要的内容。您可能需要执行多个查询才能获得您的案例所需的一切。

    【讨论】:

    • 你能举个例子吗?我的意思是 Firebase 在这个应用程序的所有其他部分都运行良好。但是我想要做的是可以使用 Cloud Functions。所以我能做的就是将一个新帖子复制到其所有作者的关注者部分。这样他们的关注者就可以使用直接查询获得所有关注的帖子。但是,如果用户有 10 万粉丝怎么办。我应该循环运行 10 万次吗?
    • 您将花费更多的代码/时间在写入时复制数据,或者您将花费更多的代码/时间来读取数据。没有其他选择。好吧...除非您想获得一定范围的用户,在这种情况下您可以startAt("user01").endAt("user10")
    【解决方案2】:

    有两种方法可以处理这件事。第一种是使用 Firebase 的云功能来侦听用户创建的任何文档,然后调用一个方法,该方法将创建的文档的副本发送给每个关注的用户。 第二个是 Doug Stevenson 提到的,基本上您必须创建一个集合或文档,其中包含您关注的所有用户,然后您可以从中调用每个用户来获取您的数据。

    【讨论】:

    • 我目前正在做的是你提到的第一个过程。但是如果关注者数量超过 100k+,我会遇到什么问题吗?
    • 云功能是您案例的正确选择,它会随着您的用户节点的增长而扩展。不用担心云功能可以轻松处理。
    • @Robotec 正如您在第一个过程中提到的那样,如果用户有新的关注者 doe 的 Firebase 功能会自动向该新关注者添加帖子怎么办?
    • 确实如此,假设一个新的追随者将他/她的用户 ID 添加到您的追随者的 ID 列表中,firebase 函数(一旦您写了一个帖子就会触发)会读取该 ID 列表并将帖子发送给其中的每个人。您需要使用批量写入来处理向关注者发送帖子的过程。
    【解决方案3】:

    我最近找到了解决此类问题的方法。您可以在此链接中查看:https://stackoverflow.com/a/70861741/11351916

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多