如何返回Firestore字段值而不是文档

时间:2018-02-02 19:55:22

标签: android firebase google-cloud-firestore

所有Firestore数据检索示例都显示返回的完整文档。像这样的例子:

// Create a reference to the cities collection
CollectionReference citiesRef = db.collection("cities");

// Create a query against the collection.
Query query = citiesRef.whereEqualTo("state", "CA");

我的数据库中有3,000个城市对象,我需要获取数据库中所有唯一状态的列表。有人能告诉我一个如何从Firestore获取此信息的示例吗?我希望我不需要下载所有3000个文档,只是为了自己整理这个列表。

2 个答案:

答案 0 :(得分:1)

您可以创建一个由onWrite事件触发到您的cities集合的云功能。此函数可以查看state集合中是否已存在states,如果没有,则添加它。

这样,您最终会得到一个states集合,其中只有一个state。由于状态通常是2个字母的代码,因此您可以使用此代码作为文档索引,以确保云函数写入的唯一性。

答案 1 :(得分:1)

正如弗兰克所说,实现这一目标的唯一方法是通过复制数据。这个tehnique被命名为非规范化,为此,我会与你分享另一个资源,这是我个人建议你看到的更好理解的教程,Denormalization is normal with the Firebase Database。本教程是针对Firebase实时数据库制作的,但Cloud Firestore中也有相同的原则。

因此,要解决您的问题,您需要创建另一个顶级集合,您只需要存储唯一的状态。但是你需要知道每次添加或删除文档时,你需要做两次,一次是你已经拥有的cities集合,另一次是新创建的集合{{1} }。