我正在寻找一种东西,我可以在一个对象上执行多个firebase.database.References
的多个更新(在执行提交之前),然后在最后提交该对象,如果不成功,则不对任何对象进行任何更改我的Firebase References
。
这存在吗?我认为firebase.database.Transaction
会很相似,因为它是一个原子更新,并且确实包含一个回调,该回调表明是否已提交,但我相信update函数仅适用于单个对象,并且函数似乎没有返回transactionId或我可以传递给其他firebase.database.Transactions
的东西。
更新 此交易的更新似乎返回了一个交易,该交易可能有助于其链接:https://firebase.google.com/docs/reference/js/firebase.firestore.Transaction
但这与其他交易不同:
答案 0 :(得分:1)
Firebase数据库事务根据该位置的当前值执行更新。它们显然无法在多个位置工作,因为这会限制其可伸缩性。有时,开发人员通过在其JSON树(位置的第一个公共点)上执行更高的事务来解决此问题。我不建议这样做,因为那样会进一步限制可伸缩性。
通过一个API调用有效更新多个位置的唯一方法是进行多个位置更新。但是,这没有内置的当前值读数。
因此,如果要基于当前位置更新多个位置,则必须在应用程序代码中执行读取操作,将其转换为多位置更新,然后使用安全规则来确保所有这些位置更新遵循您的应用程序规则。这是一种非常重要的方法,因此我几乎看不到它是在实践中完成的。例如,请参见我的答案:Is the way the Firebase database quickstart handles counts secure?