当前位置: 首页 > 知识库问答 >
问题:

仅运行 on在 Firestore 中添加侦听器

梁丘扬
2023-03-14

我在Firestore中有一个不断更新的集合,因此有很多文档。

现在,我想附加一个集合快照侦听器,以便每当有新数据并且只有当有新数据时,才会触发事件。

我试过了

CollectionReference reference = firestore.collection("table");
reference.addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable snapshots, @Nullable FirebaseFirestoreException exception) {
        List<DocumentChange> documentChanges = (snapshots == null) ?
            new ArrayList<DocumentChange>() : snapshots.getDocumentChanges();

        for (DocumentChange document: documentChanges) {
            DocumentSnapshot snapshot = document.getDocument();
            DocumentChange.Type documentType = document.getType();

            if (documentType == Document.Type.ADDED) {
                Log.d("Notice", "Document added");
            }
        }
    }
});

但它得到了每个文档,甚至因为文档而使应用程序崩溃。很多。

谁能帮我怎么做。需要明确的是,我想附加一个文档侦听器,并在附加快照侦听器后仅侦听文档更新

共有1个答案

庞元青
2023-03-14

集合或查询上的快照侦听器最初将始终返回整个匹配文档集。它们将存储在内存中,直到侦听器被删除。无法更改此行为。

相反,请考虑以这样一种方式对数据进行建模,以便能够仅查询当前文档,可能使用日期类型字段,并且仅查询具有日期的文档

另请记住,您可以使用云函数仅对新添加的文档进行一些后端代码触发。

 类似资料:
  • 我有一个项目,我们将在rabbit中有数百个(可能数千个)队列,每个队列都需要一个消费者池来使用。 在rabbit(使用spring amqp)中,您有rabbitlistener注释,它允许我静态地分配这个特定消费者将处理的队列。 我的问题是,对于rabbit和spring,是否有一种干净的方法可以让我获取一段队列(比如以a-c开头的队列),然后还可以侦听消费者运行时创建的任何队列。 示例(开始

  • 将事件侦听器添加到可以使用事件委派的元素。 使用 EventTarget.addEventListener() 将一个事件监听器添加到一个元素。 如果提供了 选项对象(opts) 的 target 属性,确保事件目标匹配指定的目标元素,然后通过提供正确的 this 上下文来调用回调。 返回一个对自定义委派函数的引用,以便与 off 一起使用。 忽略 opts ,则默认为非委派行为,并且事件冒泡。

  • 问题内容: 我有一个项目,我们将在兔子中有数百个(可能是数千个)队列,并且这些队列中的每个队列都需要由一组消费者使用。 在Rabbit(使用spring-amqp)中,您具有rabbitlistener批注,该批注使我可以静态分配此特定消费者将要处理的队列。 我的问题是-对于兔子和春天,有没有一种干净的方法可以让我抓取一部分队列(比如说以ac开头的队列),然后还监听使用者运行时创建的任何队列。 示

  • 我想在Java中添加一个按钮侦听器,这样当用户只需按下按钮时,按钮就会被按下。 我尝试将此操作监听器添加到我创建的按钮: 这就是整个功能: 然而,当我的gui出现时,我在输入输入后按“回车”键,什么也没有发生。我必须亲自点击按钮,这正是我试图避免的! 这是我创建的窗口: 我希望用户输入一个数字,然后按enter键,然后单击按钮。帮助我做错了什么?

  • 问题内容: 我有一个ArrayList,它向其中动态添加了一些对象,并且有一个JButton。运行我的程序时ArrayList为空,并且JButton设置为setEnabled(false)。我想在ArrayList中有2个或更多元素时启用我的按钮,如果ArrayList有一项或为空则再次禁用它。我该如何实现? 问题答案: 没有任何种类的通知机制。 我建议您编写自己的实现,该实现将委托给私有的实现

  • 我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?

  • 我试图为我们现有的laravel站点(laravel 5.2)的注销功能添加一些逻辑,但它不像登录那样简单。 客户端的现有注销工作正常,但我只想向我的Cognoto实例添加一个调用,以将用户注销他们的Cognoto会话。基本上,当用户单击logout时,我想让他们从网站上注销,就像以前一样,但也要点击我的cognito注销endpoint 我的困惑来自这样一个事实,即auth的现有路由和控制器并不

  • 我可以在下面的代码中为添加事件侦听器,但不能添加到。 是不是因为twitter做了一些事情不让我这么做?有办法绕过它吗?