【问题标题】:Firebase adding new child under certain unique push IDFirebase 在某些唯一推送 ID 下添加新子项
【发布时间】:2017-07-12 07:12:27
【问题描述】:

我正在努力实现这一目标:

households {
    householdID1 : {
        address : "BLK 16, Woodlands Street"
        accounts : {
            accountID1 : true,
            accountID2 : true,
        }
    }
}

但是当我尝试插入时,它变成了这样:

这是我的代码:

 var householdRef = firebase.database().ref('households');

var householdData = {
    address : "Blk 164"
}

householdRef.push(householdData);
var householdKey = householdRef.key;
console.log(householdKey);

var query = firebase.database().ref('accounts').orderByChild('email').equalTo('gab@gmail.com');
query.once( 'value', data => {
    data.forEach(userSnapshot => {
        let userKey = userSnapshot.key;
        console.log('userKey ' + userKey);

        firebase.database().ref('households').child(householdKey).child('accounts').push().set({
          userKey : true,
        }), (error) => {
          if (error) {
            console.log(error.message);
          }else{
            // Success
          }
        }
    });
});

在获得 homeKey 后,我尝试在该特定 homeKey 子项下添加新的嵌套子项。我首先遍历帐户记录以找到帐户的唯一 ID,然后继续添加。但它最终变成了上面这张图。有什么想法吗?

【问题讨论】:

    标签: javascript firebase react-native firebase-realtime-database


    【解决方案1】:

    如果您使用push() 函数,firebase 会为孩子生成一个新密钥。

    我无法调试,但我认为这是解决方案:

    var householdRef = firebase.database().ref('households');
    
    var householdData = {
      address : "Blk 164",
    };
    
    householdRef.push(householdData);
    var householdKey = householdRef.key;
    
    var query = firebase.database().ref('accounts').orderByChild('email').equalTo('gab@gmail.com');
    query.once( 'value', data => {
        data.forEach(userSnapshot => {
            let userKey = userSnapshot.key;
    
            firebase.database().ref('households').child(householdKey).child('accounts').update({
              [userKey] : true,
            }), (error) => {
              if (error) {
                console.log(error.message);
              }else{
                // Success
              }
            }
        });
    });
    

    【讨论】:

    • 非常感谢!有用!那么 push() 和 update() 以及 userKey 的 [] 之间有什么区别?
    • 如果使用 push() 函数,firebase 会为孩子生成一个新密钥。使用 [] 您可以从变量中设置键。
    • 有没有办法让 userKey 公开?因为我想在 for 循环之外使用它来更新另一个孩子
    • 当然,您可以检索所有用户uid,然后您可以升级您的孩子。
    • 你介意看看这个问题stackoverflow.com/questions/45407374/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2018-02-27
    • 2019-02-22
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多