【发布时间】:2023-04-07 09:30:02
【问题描述】:
我在看 this video,它谈到了 Firebase 中的多路径更新。多路径更新很棒,因为它们允许您调用 firebaseRef.update() 方法两次或多次,同时让它们成为一个原子的、全有或全无的操作。
这很好,但在我目前的情况下,我不想使用 update() 方法。相反,我想使用 FirebaseRef 的 push 方法并允许 Firebase 为我的对象生成唯一键。
棘手的部分是我对数据进行了非规范化处理,使其位于两个位置。我真正想做的是有一个原子的、全有或全无的操作,它使用 Firebase 的 push() 操作来创建一个唯一键,然后使用该键将对象保存在 2 个或多个不同的放在我的数据库数据中。但是, push() 的语法已经使用了一个对象,所以我想要做的甚至可能吗?
注意:另一种可能的解决方案可能是使用 Firebase api 在客户端以某种方式生成唯一密钥,然后使用生成的密钥作为要插入的对象的密钥进行标准多路径更新。
【问题讨论】:
-
您最后注意到的是您问题的答案。 var key = firebase.database().ref('somestring').push();将返回一个密钥,而无需在 firebase 数据库中写入任何内容。使用该键创建您的对象,然后调用 update()
-
但是假设用户在第一次通过之后和第二次通过之前离开了应用程序。然后我的非规范化数据处于不一致状态。我想在一个原子操作中完成所有操作。
-
然后使用 transaction() 它是为此目的而构建的。但根据我个人的观点,只有在确实需要时才使用交易。
-
事务在这种情况下将不起作用。如果您认为确实如此,请发布答案。
标签: angular firebase firebase-realtime-database angularfire2 nosql