Firestore snapshotChanges DocumentChangeType "removed" 从未发送

Firestore snapshotChanges DocumentChangeType "removed" never sent

我正在使用 where 子句查询 Firestore 集合并订阅了 snapshotChanges。根据文档,我应该为添加、修改和删除的每个元素获取一个事件。

我得到了添加和修改的文件,但我从来没有得到删除的文件。

这是我的代码示例:

this.db
      .collection<Test>('test', ref => ref.where('someid', '==', someid))
      .snapshotChanges()
      .subscribe(async snapshot => {
        for (const element of snapshot) {
          switch (element.type) {
            case 'added':
              // Works fine
              break;
            case 'modified':
              // Works fine
              break;
            case 'removed':
              // Never triggered
              break;
          }
        }
      });

我假设这是因为我正在使用 where。有人遇到过吗?

更新:2020-10-14

经过更多测试,这似乎只是 AngularFirestore 的问题,而不是 Firestore 本身的问题。同时,作为解决方法,我直接使用 AngularFirestore.firestore.onSnapshot。

更新:2020-11-04 事实证明,对于 AngularFirestore,您需要使用 stateChanges 来获得我正在寻找的行为。希望这可以帮助某人。

当侦听器处于活动状态。

时,侦听器将接收 removed 个从查询结果中删除的文档的事件

所以在您的情况下,这意味着如果满足以下条件,您将获得事件:

  1. 侦听器处于活动状态,订阅了查询,并且。
  2. 文档已从集合中删除,或者
  3. 文档中 someid 字段的值发生变化。

事实证明,对于 AngularFirestore,您需要使用 stateChanges 来获得我正在寻找的行为。

这是解释 snapshotChanges 和 stateChanges 之间区别的文档: https://github.com/angular/angularfire/blob/master/docs/firestore/collections.md

当您删除集合的最后一项时会发生这种情况,此时编译器会在空块或空块处触发。