收听Firestore中的实时更新,而无需下载所有初始数据

时间:2019-05-16 07:20:03

标签: node.js firebase google-cloud-firestore

我开发了一个节点脚本,该脚本可侦听Firestore集合上的更改并将其转发到REST服务:

const db = admin.firestore();
const collectionRef = db.collection('users');

var collObserver = collectionRef.onSnapshot(querySnapshot => {
        let changes = querySnapshot.docChanges();

        changes.forEach(change => {
           console.log("Change", change.type, change.doc.id, change.doc.data())
           // Do stuff with changes
        });
    }, err => {
        console.log(`Encountered error: ${err}`);
    }
);

但是,当脚本加载onSnapshot方法时,会触发对完整集合的初始请求。这是一个问题,因为我的收藏集可能包含多达一百万条记录,并且脚本节点无需下载和管理所有记录,它应该只获取更改。

我在官方SDK中看不到任何选项。是否有一些针对此问题的技巧/解决方案?

1 个答案:

答案 0 :(得分:0)

查询侦听器始终会收到查询会匹配的所有匹配文档。您无法更改。您唯一可以更改的是查询。当前,您的查询要查询集合中的所有文档,因此您必须使用过滤器缩小范围。

您可以做的是确保您的查询仅请求所需数量的数据。如果您的文档具有自然的时间顺序,请尝试将时间戳附加到每个文档,并仅查询自上次执行查询以来的新文档。如果您没有某种“检查点”来判断新旧内容,那么您将很难进行这项工作。