我有一个服务器端nodejs程序监视/"监听"到特定的火场位置。
db.collection('temp').where('processed', '==', 'false').onSnapshot(snapshots =>
{
snapshots.forEach(snapshot =>
{
//processes some logic
//db.collection('temp').document(snapshot.id).update('processed': true);
}
}
如果查询快照仅返回一个快照,则没有问题,但如果查询快照返回多个快照,则逻辑将被调用的次数超过预期。例如,如果同时向监视位置写入n次,则逻辑被称为n ^ 2次。这将导致读取配额的成本。如何确保每个文档只读取一次?
答案 0 :(得分:0)
通过在snapshot
回调中循环onSnapshot()
,您每次发生更改时都会处理与查询匹配的所有文档。
如果您只想处理已更改的文档,则需要loop over snapshot.documentChanges
as shown in the Firebase documentation。
如果您始终使用processed = false
撰写文档,那么您只需处理change.type = added
:
db.collection('temp').where('processed', '==', 'false').onSnapshot(snapshots =>
snapshots.docChanges.forEach(function(change) {
if (change.type === "added") {
//processes some logic
//db.collection('temp').document(change.id).update('processed': true);
}