【问题标题】:Run only an onAdd listener in Firestore在 Firestore 中仅运行 onAdd 侦听器
【发布时间】:2018-10-01 06:46:20
【问题描述】:

我在 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");
            }
        }
    }
});

但它获得了每个文档,甚至在某个时候因为文档而导致应用程序崩溃。很多。

谁能帮我解决这个问题。需要明确的是,我想附加一个文档侦听器,并且只在附加快照侦听器之后侦听文档更新

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    集合或查询上的快照侦听器最初总是会返回整个匹配文档集。它们将存储在内存中,直到侦听器被删除。没有办法改变这种行为。

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

    另外请记住,您可以使用 Cloud Functions 为新添加的文档设置一些后端代码触发器。

    【讨论】:

    • 您是说我可以将快照侦听器附加到查询而不是集合引用吗?如Query query = firestore.collection("table").where("timestamp", "&lt;=", System.currentTimeMillis);
    • 一个 CollectionReference 实际上一个查询。这是一个没有过滤器的查询。看看它是如何从字面上扩展查询的:firebase.google.com/docs/reference/android/com/google/firebase/…
    • @cr05s19xx 正是我需要的
    猜你喜欢
    • 2021-07-12
    • 2023-03-19
    • 2018-04-06
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多