使用读取查询激发存储事务语义



在文档中,交易失败,当:

事务读取在事务之外修改的文档。

我想知道这是否也适用于读取查询,它可能会返回多个文档(通过.where('x', '==', 'y')(。如果在事务期间某个时候再次执行Read查询,则会返回更多结果,那么事务是否仍然失败?

为了说明我的问题,假设我有一组具有以下模式的汽车:

{ 
ownerId: string, 
make: string,
horsepower: int
...
}

现在我在transaction.get()电话中查询某位车主的汽车:

transaction.get(firestore.collection('cars').where('ownerId', '==', '123'))...

假设我收到了一辆有2辆车的Snapshot,基于这些车,我想在交易中发挥一些魔力。在交易过程中,会为该车主添加另一辆车(因此它不是初始快照的一部分(。在这种情况下,交易会失败吗?

附言:我并不是在寻找不同的解决方案,上面的例子是虚构的,我只是想了解在这种情况下交易的行为。

假设我收到了一个有2辆车的快照,基于这些车,我想在交易中发挥一些魔力。在交易过程中,会为该车主添加另一辆车(因此它不是初始快照的一部分(。在这种情况下,交易会失败吗?

绝对不会。由于新添加的汽车不属于初始交易的一部分,它不会失败。添加的汽车被视为新添加的对象,而不是修改过的对象。

他们在文件中提到:

事务读取在事务之外修改的文档。

因为事务绝对需要与服务器进行往返通信,以确保事务中的代码成功完成。因此,如果某个特定文档被已经涉及的事务以外的操作修改,那么事务就会失败。

最新更新