【问题标题】:Firestore: get document back after adding it / updating it without additional network callsFirestore:在添加/更新文档后取回文档,无需额外的网络调用
【发布时间】:2019-03-11 16:58:13
【问题描述】:

是否可以在添加/更新文档后取回文档,而无需使用 Firestore 进行额外的网络调用,类似于 MongoDB?

我觉得先调用添加/更新文档然后再调用获取它是愚蠢的。

【问题讨论】:

  • 出于什么原因你想“取回”?您能否详细说明您的确切目标是什么?
  • 例如读取服务器时间戳的值。或者在进行部分更新时读回整个文档的值。
  • 好的,现在更清楚了,谢谢。您使用的是哪个 SDK? Javascript 一个?
  • 是的,Firebase Admin SDK for Node。
  • 我同意。我们所拥有的只是事实如此。没有合理的理由。

标签: node.js firebase google-cloud-firestore firebase-admin


【解决方案1】:

正如您可能在 Node.js(和 Javascript)SDK 的文档中看到的那样,这是不可能的,无论是使用 DocumentReference 的方法还是使用 CollectionReference 的方法。

更准确地说,DocumentReferenceset()update() 方法都返回一个包含void 的Promise,而CollectionReferenceadd() 方法返回一个包含DocumentReference 的Promise。


旁注(与下面 darrinm 的回答一致):有趣的是,使用 Firestore REST API,当您 create a document 时,您会返回(即通过 API 端点响应)Document 对象。

【讨论】:

    【解决方案2】:

    这似乎是 Firestore Javascript API 的任意限制。 Firestore REST API 在同一调用中返回更新后的文档。

    https://firebase.google.com/docs/firestore/reference/rest/v1beta1/projects.databases.documents/patch

    【讨论】:

      【解决方案3】:

      当您将文档添加到 Cloud Firestore 时,服务器会影响存储的数据。这可能发生的几种方式:

      • 如果您的数据包含服务器端时间戳的标记,服务器会将该标记扩展为实际的时间戳。
      • 根据您的服务器端安全规则不允许您的数据数据,服务器将拒绝写入操作。

      由于服务器会影响Document 的内容,客户端不能简单地将它已经拥有的数据作为新文档返回。如果您只想在客户端中显示您发送到服务器的数据,您当然可以通过简单地重用您传递给setData(...)/addDocument(data: ...) 的对象来实现。

      【讨论】:

      • 这正是我想要从 Firestore 中返回文档但又没有另一个网络调用开销的原因,而这正是使用 MongoDB 的方法。
      • ^^ 正是。我对弗兰克无关紧要的回答感到困惑。没有人谈论乐观。
      猜你喜欢
      • 1970-01-01
      • 2021-06-11
      • 2020-12-04
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2018-12-05
      • 1970-01-01
      相关资源
      最近更新 更多