【问题标题】:Editing a Document based on query result in Firestore Transaction根据 Firestore 事务中的查询结果编辑文档
【发布时间】:2019-03-18 03:35:50
【问题描述】:

我目前正在使用 Android SDK 在 Firestore 数据库上做一个项目。我需要编写一个事务,其中我想在“destinations”集合中编辑一个“destination”文档,只有当另一个名为“batches”的集合没有任何将其字段名称“destionId”设置为编辑目标文档的文档时ID。我正在使用设置了 .limit(1) 的查询进行检查

现在,我想在事务中执行此操作,因为这个应用程序是实时的,并且会被很多人同时使用。如果我没有使用事务,那么可能是另一个人可能会在我的查询和目标文档的实际编辑之间添加一个带有此destinationId 的“批处理”文档。所以,我想在每次事务重试时运行查询并检查批次集合。

但我不确定如何在事务中以异步方式运行 Firestore 查询。我相信没有办法在 Android SDK 中发出阻塞查询请求。如有错误请指正。

有人可以帮助我了解如何解决此冲突吗?提前致谢。

【问题讨论】:

  • Doug 回答:您不能在事务中进行查询。这意味着您必须在事务之外进行查询,并在事务中加载相关文档。我不确定这是否可以在这里工作,因为我发现将文本解析为(伪)代码非常困难。您可能想用一些(伪)代码更新问题,以便我们更容易推理用例/问题。

标签: android google-cloud-firestore


【解决方案1】:

您不能在事务中执行查询,或者使事务取决于一组不变的查询结果。您只能通过 ID 获取单个文档,以便稍后在该事务中更改它们。

【讨论】:

    【解决方案2】:

    如果它对其他人有帮助,则可以通过管理 SDK(与 Java 客户端 SDK 相比)运行对查询结果进行操作的事务。查看here 上的文档。

    从数据库中检索文档或查询结果。对所有返回的文档持有悲观锁。

    SO 帖子here 中也提到了此功能。请注意,在相应的客户端 JS SDK doc 上,get 函数的参数只接受 documentRef

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2021-08-02
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2022-06-10
      相关资源
      最近更新 更多