对于 Angular Material MatTable,当链接多个查询时,AngularFire 集合查询 "this.filteredData" 未定义

For Angular Material MatTable, AngularFire collection query "this.filteredData" is undefined when multiple queries are chained

...
this.db
        .collection(uid, (ref) => {
          console.log('ref', ref);
          return ref.where('year', '==', '1954').orderBy('lastName');
        })
        .snapshotChanges()
...

这会产生错误:

ERROR TypeError: Cannot read properties of undefined (reading 'length')
    at MatTableDataSource._filterData (table.js:725)

当我在@angular/material/ivy_ngcc/fesm2015/table 深入研究 node_modules 中的 table 模块时.js :

 /**
     * Returns a filtered data array where each filter object contains the filter string within
     * the result of the filterTermAccessor function. If no filter is set, returns the data array
     * as provided.
     */
    _filterData(data) {
        // If there is a filter string, filter out data that does not contain it.
        // Each data object is converted to a string using the function defined by filterTermAccessor.
        // May be overridden for customization.
        this.filteredData = (this.filter == null || this.filter === '') ? data :
            data.filter(obj => this.filterPredicate(obj, this.filter));
        if (this.paginator) {
            console.log('this.filteredData', this.filteredData);
            this._updatePaginator(this.filteredData.length);
        }
        return this.filteredData;
    }

如果我使用 .orderBy 或 where,或任何其他查询本身,this.filteredData returns 过滤数据的数组,如预期的那样。但是,如果我尝试使用多个查询,如上例中的 .where().orderBy() 那么 this.filteredData returns undefined.

有人知道为什么会这样吗?

我认为这肯定与 Angular 生命周期挂钩中 MatPagination 和 MatSort 的位置有关,而 when/how 数据是通过 AngularFire 从 FireStore 获取的。

没有。

我只需要在 FireStore 数据库 -> 索引中创建一个复合索引。在本例中包含“年”和“姓氏”字段。

这让我很失望,因为没有 link 的传统错误将其索引到 firestore 中,通常在这种情况下会出现。