Firebase实时数据库中存在"多路径推送"这样的事情吗?

Jim*_*Jim 5 nosql firebase firebase-realtime-database angularfire2 angular

我正在观看此视频,该视频讨论了Firebase中的多路径更新.多路径更新很棒,因为它们允许您调用firebaseRef.update()方法两次或更多次,同时使它们成为一个原子,全有或全无操作.

这很好,但在我目前的情况下,我不想使用update()方法.相反,我想使用FirebaseRef的推送方法,并允许Firebase为我的对象生成唯一键.

棘手的部分是我已经对我的数据进行了非规范化,以便它在两个地方.我真正想做的是使用Firebase的push()操作创建一个唯一的密钥,然后使用该密钥将对象保存在我的数据库数据内的两个或多个不同的位置,这是一个原子的,全有或全无操作.但是,push()的语法已经使用了一个对象,所以我想做什么呢?

注意:另一种可能的解决方案可能是使用Firebase api以某种方式在客户端生成唯一键,然后使用生成的键作为插入对象的键进行标准多路径更新.

car*_*ant 12

没有多位置推送,但由于在客户端上生成推送ID,您可以使用多位置更新来执行所需操作.

您可以通过push不带参数调用来生成推送ID .在客户端上生成推送ID,生成推送ID不涉及与数据库的交互:

let key = firebase.database().ref().push().key;
Run Code Online (Sandbox Code Playgroud)

您也可以使用AngularFire2来执行此操作; 但是,你必须传递一个argument(undefined)push来安抚TypeScript:

let key = angularFire.database.list('').push(undefined).key;
Run Code Online (Sandbox Code Playgroud)

生成密钥后,您可以创建多位置更新:

let obj = { some: 'object' };
angularFire.database.object('').update({
    [`a/path/${key}`]: obj,
    [`another/path${key}`]: obj
});
Run Code Online (Sandbox Code Playgroud)

更新是原子的,因此要么更新所有路径,要么不更新.

  • 真棒.使用没有参数的推送是关键!(没有双关语意图嘿嘿) (2认同)