firestore查询快照不止一次读取

时间:2018-03-30 12:27:54

标签: javascript google-cloud-firestore

我有一个服务器端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次。这将导致读取配额的成本。如何确保每个文档只读取一次?

1 个答案:

答案 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);
        }