带有子值的 Firebase 多路径原子更新?

Posted

技术标签:

【中文标题】带有子值的 Firebase 多路径原子更新?【英文标题】:Firebase Multi path atomic update with child values? 【发布时间】:2018-07-27 01:08:44 【问题描述】:

我已成功更新我的用户个人资料上的个人资料图片以及使用此功能发布的所有评论:

export const storeUserProfileImage = (url) => 
    const  currentUser  = firebase.auth();

        firebase.database().ref(`/users/$currentUser.uid/profilePic`)
        .update( url );

        firebase.database().ref('reviews')
          .orderByChild('username')
          .equalTo('User3')
          .once('value', (snapshot) => 
            snapshot.forEach((child) => 
              child.ref.update( profilePic: url );
            );
        );
  ;

我知道我应该使用原子更新来执行此操作,以便同时更新数据(以防用户离开应用程序或出现其他问题)。在查询子值时,我对如何实现这一点感到困惑。

任何帮助或指导将不胜感激!

【问题讨论】:

【参考方案1】:

声明一个变量来存储所有更新。在您的听众循环中阅读更新时添加更新。循环完成后,运行原子更新。

export const storeUserProfileImage = (url) => 
    const  currentUser  = firebase.auth();

        firebase.database().ref('reviews')
          .orderByChild('username')
          .equalTo('User3')
          .once('value', (snapshot) => 

            var updates = ;
            updates[`/users/$currentUser.uid/profilePic`] = url;

            snapshot.forEach((child) => 
              updates[`/reviews/$child.key/profilePic`] = url;
            );

            firebase.database().ref().update(updates);

        );
;

【讨论】:

如果它回答了您的问题,请考虑 accepting this answer,以便其他人知道它已解决。 我刚刚接受了它-谢谢你的教训哈哈...我不知道该怎么做。 嘿,罗萨里奥——如果我必须循环访问多个引用怎么办?在我的例子中是评论(就像我们已经解决的那样)和具有完全相同 JSON 结构的贡献。

以上是关于带有子值的 Firebase 多路径原子更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何为具有特定子子值的子项检索 Firebase DatabaseReference?

Firebase实时数据库REST API是否支持不同实体位置的多路径更新?

如何使用 Cloud Functions for Firebase 获取子值的键?

使用 Swift 更新 Firebase 中的子值

Firebase 和 Swift 如何按子值提取特定记录?

从 Firebase 仅检索当前用户的子值