首页 > 解决方案 > 根据 Firestore 中的文档字段限制数据

问题描述

我正在使用 Firebase Firestore 来满足我的数据需求。我有一个数据模型,其中有一个苹果集合,每个文档代表一个唯一的苹果,它有一个 object 类型的字段,它本质上是 <string, string> 的映射

把每个苹果文档想象成:

name: "SiberianApple",
weight: "400g"
color: {
  today: "green",
  yesterday: "red", 
  tomorrow: "crimson"
}

通过阅读文档,我了解到我们可以通过各种方式查询集合,但是是否可以限制客户端在获取文档时需要获取的信息量。我可以对此字段进行查询color,使其仅返回

name: "SiberianApple",
weight: "400g",
color: {
   today: "green"
}

基本上类似于graphql,我可以在其中询问我想要的东西。想知道是否可以查询或者该字段是否应该是本文档的子集合,以便我可以使用子集合的路径查询颜色apples/<appleId>/colors

标签: javascriptfirebasewebgoogle-cloud-firestore

解决方案


Cloud Firestore 侦听器在文档级别触发。无法仅使用文档中的特定字段触发或拆分文档以仅获取一个属性。这是整个文件或什么都没有。因此 Firestore 客户端 SDK 始终返回完整的文档。不幸的是,没有办法只请求文件的一部分。

是否可以限制信息量。

如前所述,这是不可能的。您可以做的是使用只能包含您需要的字段的文档创建另一个集合。这种做法称为反规范化,它在 NoSQL 数据库中是一种非常常见的做法。


推荐阅读