Firebase仅更新父节点

时间:2016-06-10 04:23:00

标签: javascript json firebase firebase-realtime-database

这是一个小问题,如果需要,我只会重写所有内容,但我想保存自己的工作。

我的结构看起来像users/usernames/<someUN>/。我查看了Firebase文档,但是我找不到如何在“紧密”版本中更新的示例。树。

现在,如果我想更改<someUN>,您可以看到问题

this.database.ref('users/usernames/' + this.UN).update({
  username: newUsernameVariable
})

我必须重组一个不可变的值并执行类似users/usernames/<userID>/username/<username>

的操作
  1. 反对非正规化数据库和
  2. 我已经拥有一个持有uids/<uid>/usernames/<UN>的树,因此这将是多余的
  3. 现在,如果你试图将修改提升一个档次:

    this.database.ref('users/usernames').update({
      this.UN: newUsernameVariable
    })
    

    这非常接近我想要的,但遗憾的是JSON无效。左侧未转换为字符串。我试过这个

    var UNJSON = JSON.stringify(this.UN);
    this.database.ref('users/usernames/').update({
      UNJSON: newUsername
    });
    

    但它不会起作用,只是将UNJSON视为一个词

    编辑:

    我已将其更改为

    var updates = {};
    updates[this.UN] = newUsername;
    this.database.ref('users/usernames').update(updates);
    

    哪个几乎有效,但现在替换了子节点!

    我已经改变了这个标题的问题,因为基本上我已经达到users/usernames/myawesomeusername/{manychildren}这样的地步,我想在编辑myawesomeusername时保留孩子们。

    编辑2:this.UN在点击更新代码时填充在onAuthStateChanged中。这是this.UN

    的设置
    // UN is a global read/write username string that persists throughout the session.
    // SETTING THE VALUE OF this.UN WITH UID
    if(this.UN == undefined) {
      console.log('this.UN was null. Fetch the real one with UID from the database');
      this.database.ref('uids/' + user.uid).once('value', function(snapshot){
        this.UN = snapshot.val().username;
        console.log('Grabbed from snapshot.username');
        if(this.UN == undefined) {
          console.log('Impossible error');
        }
      }.bind(this)).catch(function(err){
        console.log('Error obtaining userID from database', err);
        this.UN = user.displayName || "User" + user.uid;
      }.bind(this));
    } else {
      console.log(this.UN);
    }
    

    我使用this.UN来处理应用程序其余部分的用户名。

0 个答案:

没有答案