我开发了一个节点脚本,该脚本可侦听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中看不到任何选项。是否有一些针对此问题的技巧/解决方案?
答案 0 :(得分:0)
查询侦听器始终会收到查询会匹配的所有匹配文档。您无法更改。您唯一可以更改的是查询。当前,您的查询要查询集合中的所有文档,因此您必须使用过滤器缩小范围。
您可以做的是确保您的查询仅请求所需数量的数据。如果您的文档具有自然的时间顺序,请尝试将时间戳附加到每个文档,并仅查询自上次执行查询以来的新文档。如果您没有某种“检查点”来判断新旧内容,那么您将很难进行这项工作。