在一次读取计数中仅获取来自 Cloud Firestore 的集合 ID

Tap*_*jee 4 firebase angularfire ionic-framework google-cloud-firestore

在Cloud Foreshore 的这份文档中提到,“请求一个集合 ID 列表,您需要为读取一个文档付费”。

现在我在我的项目中使用 AngularFire 和 Ionic3。我的要求是仅从具有 where 条件的集合中获取集合 ID。如果我执行以下操作,结果中的读取次数 = 文档数。

let snap = this.afs.collection('path').ref
        .where('field', "==",'data').get();

snap.forEach(x => {
          list.push(x.id);
        });
Run Code Online (Sandbox Code Playgroud)

我无法使用getCollections()我在几个地方找到的方法作为解决方案。

如果您有解决方案,请告诉我。

Fra*_*len 6

FirestoregetCollections()方法仅存在于服务器端 SDK 中,它按单次读取操作收费。但正如Doug 回答的那样,它返回集合ID/名称,而不是文档 ID。

要在客户端获取文档 ID,您需要阅读整个文档。因此,这将按照您阅读的文档数量收费,并且会为每个文档中的所有数据消耗带宽。

在服务器上,您可以使用该select()方法获取仅包含文档 ID 的列表。您仍然需要为阅读每个文档付费,但它会消耗更少的带宽。

看:


Dou*_*son 4

听起来您想知道是否有一种方法可以获取集合中的所有文档 ID,而无需读取每个文档。目前这是不可能的。使用 Firestore 客户端 SDK 时,您唯一的选择是查询整个集合,这会将每个文档的全部内容传输到客户端。

  • 如果与内存大小有关怎么办?假设您有大量文档,每个文档都有数百千字节。您只需要文档的 ID,即可列出/链接到它们。如果加载所有文档内容,您将拥有数百兆字节的内存,而无需它们。 (7认同)