【问题标题】:Can I use Transactions and batched writes for read only?我可以将事务和批量写入用于只读吗?
【发布时间】:2019-09-23 14:00:17
【问题描述】:

我可以在一个类似于Transactions and batched writes 但没有写入的连接中从firestore 读取多个数据吗?

例如:

我通过谷歌按钮登录,玩家名称是 Player1

第一次连接:我想阅读他们拥有钻石的前 10 名玩家。

第二次连接:我想读钻石Player1。

我可以在一个连接中混合第一个和第二个连接吗?

因为我想如果第一个连接失败,所以取消第二个连接。或者如果第一个连接成功,第二个连接失败,所以取消第一个连接等...,我希望你明白我的意思。

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    事务和批量写入都是写入操作。读操作没有类似的东西,也不应该真的需要。

    如果您希望后续读取失败,您应该:

    • 在前一次读取完成后依次开始每次读取。
    • 同时启动所有读取,但检查每个已完成读取操作的状态。只有在所有读取操作成功完成后才能继续。

    从阅读您的问题来看,您似乎想为排名前 10 的玩家进行玩家信息的客户端连接。这通常会导致 11 次读取。

    • 获取前 10 名分数的查询,其中包括玩家的 UID。
    • 读取 10 个单独的文档以获取每个顶级玩家的个人资料。

    在这种情况下,例如,您可以保留一个计数器来跟踪您已经成功阅读了多少玩家资料。一旦该计数器达到 10,您就知道您拥有所有玩家资料,并且可以开始您可能拥有的任何后续操作。如果您想在任何玩家资料加载失败后使整个操作失败,您也需要一个单独的标志。

    【讨论】:

    • 我可以使用Transactions and batched 来检查是否在 Firestore 中找到了文档,如果找到了,请执行某些操作,但如果没有找到则取消连接。
    • 不要写任何代码,告诉我我能不能,如果我能做到,我会自己想办法。
    • 是的,您可以在事务中读取文档,从而检查它是否存在。但不是在批量写入中,因为这就是它与事务的不同之处。
    • 感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2022-01-25
    • 2015-06-26
    • 2012-03-01
    相关资源
    最近更新 更多