Firestore:在添加/更新文档后取回文档,无需额外的网络调用
Posted
技术标签:
【中文标题】Firestore:在添加/更新文档后取回文档,无需额外的网络调用【英文标题】:Firestore: get document back after adding it / updating it without additional network calls 【发布时间】:2019-03-11 16:58:13 【问题描述】:是否可以在添加/更新文档后取回文档,而无需使用 Firestore 进行额外的网络调用,类似于 MongoDB?
我觉得先调用添加/更新文档然后再调用获取它是愚蠢的。
【问题讨论】:
出于什么原因你想“取回”?您能否详细说明您的确切目标是什么? 例如读取服务器时间戳的值。或者在进行部分更新时读回整个文档的值。 好的,现在更清楚了,谢谢。您使用的是哪个 SDK? javascript 一个? 是的,Firebase Admin SDK for Node。 我同意。我们所拥有的只是事实如此。没有合理的理由。 【参考方案1】:正如您可能在 Node.js(和 Javascript)SDK 的文档中看到的那样,这是不可能的,无论是使用 DocumentReference 的方法还是使用 CollectionReference 的方法。
更准确地说,DocumentReference 的set()
和update()
方法都返回一个包含void
的Promise,而CollectionReference 的add()
方法返回一个包含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 的方法。 ^^ 正是。我对弗兰克无关紧要的回答感到困惑。没有人谈论乐观。以上是关于Firestore:在添加/更新文档后取回文档,无需额外的网络调用的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法根据 firebase Auth 用户信息更新 firestore 文档字段?
Firestore - 如何在将文档添加到集合后获取文档 ID
添加新文档时,kotlin firestore 未更新我的 android 应用程序