如何返回 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 个文档只是为了自己整理这个列表。

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

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

正如弗兰克所说,实现这一目标的唯一方法是复制数据。这个技术被命名为非规范化,为此我将与您分享另一个资源,这是我个人建议您查看的教程,以便更好地理解,非规范化是Firebase数据库的正常现象。本教程是为Firebase实时数据库制作的,但Cloud Firestore中也有相同的原则。

因此,要解决您的问题,您需要创建另一个顶级集合,其中只需要存储唯一状态。但是您需要注意这样一个事实,即每次添加或删除文档时,都需要执行两次,一次用于您已有的cities集合,第二次用于新创建的集合uniqueStates

最新更新