我目前正在使用Android SDK在Firestore数据库上做一个项目。我需要编写一个事务,我要在其中编辑“目的地”集合中的“目标”文档,仅当另一个名为“批次”的集合中没有将其字段名称“ destionId”设置为编辑目标文档的任何文档时ID。我正在检查带有.limit(1)设置的查询
现在,我想在“交易”中执行此操作,因为该应用程序是实时的,并且会被很多人同时使用。如果我不使用事务,则可能是其他人可能在我的检查和实际编辑目标文档的查询之间添加带有此destinationId的“批”文档。因此,我想在每次重试事务时运行查询并检查批次集合。
但是我不确定如何在事务内部将Firestore查询作为异步运行。我相信在Android SDK中无法进行阻止查询请求。如果有错,请纠正我。
有人可以帮助我解决该冲突吗?预先感谢。
答案 0 :(得分:3)
您不能在事务内部执行查询,也不能使事务取决于一组不变的查询结果。您只能按其ID提取单个文档,以在稍后的交易中进行更改。
答案 1 :(得分:1)
如果对其他人有帮助,可以通过admin SDK(与Java客户端SDK相反)运行对查询结果 进行操作的事务。在此here上查看文档。
从数据库中检索文档或查询结果。对所有返回的文档持有悲观锁。
SO帖子doc中也提到了此功能。请注意,在相应的客户端JS SDK How to return a file (FileContentResult) in ASP.NET WebAPI上,get
函数的参数仅接受documentRef
。