【问题标题】:Is there a way to listen for changes in a collection WITHOUT getting back the documents in Firestore有没有办法在不取回 Firestore 中的文档的情况下侦听集合中的更改
【发布时间】:2020-11-05 04:36:37
【问题描述】:

假设我的应用中有一个名为 'books' 的集合和一个名为“所有书籍”的页面。现在假设我想在我的'books' 集合中每次有添加、删除或更改时在右上角弹出一条小消息,上面写着“此列表已过时”。有没有什么方法可以实现这一点,而无需让侦听器在每次发生更改时发回'books' 集合中的所有文档?我只想通知当数据过时而不是别的。

如果您知道如何实现这一点,请告诉我。我擅长任何语言,但最好使用 Swift 编写的解决方案。

提前致谢!

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore listener


    【解决方案1】:

    只需在您的books 文档中添加一个字段updatedon 并将其设置为执行任何写入时的当前时间(然后在删除时,您必须找到隐藏已删除书籍的方法)。

    并像这样设置一个监听器:

    colref.where("updatedon", ">", new Date())
          .orderBy("updatedon","desc")
          .limit(1)
    

    这样,您每次只需支付 1 次阅读费用。

    【讨论】:

    • 这确实是我在这种情况下要做的。请注意,Swift 的查询语法与您在此处的语法略有不同:colref..whereField("updatedon", isGreaterThan: lastupdate).order(by: "updatedon", descending: true).limit(to: 1)
    【解决方案2】:

    这是不可能的。文档或集合上的侦听器始终接收更改的整个文档。

    如果您想要“精简”通知,您可以尝试在感兴趣的文档发生更改时使用 FCM 向客户端发送消息,但是您必须在每个感兴趣的文档的后端保留记录对于每个用户,使用 Cloud Functions 触发器检查每个更改的列表,然后将每个有趣的更改通知每个客户端。这和监听器完全不一样,而且工作量很大。

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 1970-01-01
      • 2018-03-22
      • 2020-03-17
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      相关资源
      最近更新 更多