指定集合中存储了多少文档

时间:2018-01-28 07:52:03

标签: firebase google-cloud-firestore

我使用云Firestore来存储用户数据,我的问题是: 是否可以知道指定集合中存储了多少文档。如果可能的话写

2 个答案:

答案 0 :(得分:1)

Firebase Firestore几乎总是返回整个集合,包括其所有文档。因此,您只需计算检索到的数据。代码将取决于您使用的语言/框架,但所有方法都有很好的描述@official docs,如果您已设法检索数据,则应该能够只计算其项目。假设您需要使用AngularFire2为Angular2 +提供服务,并且您喜欢使用valueChanges()方法。映射检索到的数据后,即可计算其项目。代码可能看起来像这样(理想情况下,您也应该添加集合/文档接口):

import { Injectable       } from '@angular/core';
import { AngularFirestore } from 'angularfire2/firestore';

@Injectable()
export class YourService {

constructor( private _fireStore: AngularFirestore ) { }

getSomething = () => {
  const collection_reference = this._fireStore.collection('logs');
  const collection_data = collection_reference.valueChanges();
  collection_data.map( data => {
      const number_of_documents = data.length;
    } ).subscribe((query) => {});
  }
}

答案 1 :(得分:0)

Cloud Firestore中没有内置聚合查询。因此,为了获取集合中的文档计数,您确实要么必须检索所有这些文档(正如Emocuc所回答的那样)保留数据库中某些文档的数量。

使用第二种方法,只要添加或删除文档,就可以更新数据库中的计数器。这为写入操作增加了一些工作,但是在显示文档数量之后,您只需读取计数器(而不是读取所有文档)。这种权衡(对于更快/更简单的读取更复杂的写入)在NoSQL数据库中是非常常见的,并且是他们可以扩展到这么多读者的原因之一。

我建议您查看Cloud Firestore documentation has some examples of these sort of aggregation operations。虽然样本比您需要的更复杂,但它们都有详细记录,应该是一个有用的起点。