【问题标题】:Why Firestore "projects.databases.documents.list" also includes document fields?为什么 Firestore“projects.databases.documents.list”还包括文档字段?
【发布时间】:2020-06-24 16:22:41
【问题描述】:

在 Firestore 中有一个创建小文档和大集合的原则。但是,如果我们使用 Firestore 使用它的 REST API,这并不有意义,因为列表集合还会打印其中所有文档的内容。这对我来说根本没有意义,不应该只返回所有文档的 id 吗?这是我正在谈论的确切方法:https://firebase.google.com/docs/firestore/reference/rest/v1beta1/projects.databases.documents/list

【问题讨论】:

  • 如果您的应用程序中的功能之一是获取所有 documentId 而没有任何子数据,那么您应该创建一个仅包含 documentId 的集合,其中包含一个 key: value 对“documentId: true”。这是 NoSQL 数据库中非常常见的做法(复制、非规范化)。看到这篇有点复古但仍然相关的文章Denormalizing is Norma

标签: firebase rest google-cloud-firestore


【解决方案1】:

API 工作正常。如果您不想要任何文档字段(或受限字段),则可以使用您链接的 API 文档中描述的 mask 参数:

对象(文档掩码)

要返回的字段。如果未设置,则返回所有字段。

如果文档具有此掩码中不存在的字段,则该字段 不会在响应中返回。

【讨论】:

  • 我没有说 api 工作不正确,但我不明白为什么它是这样设计的。当收集系统的全部目的是不需要阅读所有内容而只需要阅读您需要的文件时,为什么列出不仅仅是给您文档的 ID?
  • 因为查阅索引以获取 ID 的成本与读取每个完整文档的成本基本相同。我怀疑 API 的创建者认为通过省略文档内容来“优化”这个调用并没有什么意义,除非是为了节省带宽。这时候mask 参数就派上用场了。
  • 如果您不喜欢 API 的工作方式,或者您需要向工程人员提出有关此 API 细节的问题,请直接联系 Firebase 支持。 support.google.com/firebase/contact/support
  • @PawełKiełb 我认为这可能是一个假设,即收集系统的全部目的是不需要阅读所有内容a collection is a grouping of some variable number of data items (possibly zero) that have some shared significance。然而,just getting documentId's 并没有与语句的其余部分一起使用只有您需要的文档,因为您可以通过查询轻松获得您需要的文档。
猜你喜欢
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
相关资源
最近更新 更多