Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase更新只是一个父节点_Javascript_Json_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase更新只是一个父节点

Javascript Firebase更新只是一个父节点,javascript,json,firebase,firebase-realtime-database,Javascript,Json,Firebase,Firebase Realtime Database,这是一个小问题,如果需要的话,我会重写所有的内容,但我想把工作留给自己 我有一个类似于users/usernames/的结构。我查阅了Firebase文档,但在“紧凑”树中找不到如何更新的示例 现在,如果我想更改,您可以看到问题所在 this.database.ref('users/usernames/' + this.UN).update({ username: newUsernameVariable }) 我必须重新构造一个不可更改的值,并执行类似于users/usernames//u

这是一个小问题,如果需要的话,我会重写所有的内容,但我想把工作留给自己

我有一个类似于
users/usernames/
的结构。我查阅了Firebase文档,但在“紧凑”树中找不到如何更新的示例

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

this.database.ref('users/usernames/' + this.UN).update({
  username: newUsernameVariable
})
我必须重新构造一个不可更改的值,并执行类似于
users/usernames//username/
的操作,但是

  • 这不利于数据库的非规范化和
  • 我已经有了一个包含
    uids//usernames/
    的树,因此这将是额外的冗余
  • 现在,如果您尝试将ref向上移动一个级别:

    this.database.ref('users/usernames').update({
      this.UN: newUsernameVariable
    })
    
    这与我想要的非常接近,但不幸的是,这不是有效的JSON。左侧未转换为字符串。我试过这么做

    var UNJSON = JSON.stringify(this.UN);
    this.database.ref('users/usernames/').update({
      UNJSON: newUsername
    });
    
    但这不起作用,只是把养恤基金当作一个词

    编辑:

    我把它改成了

    var updates = {};
    updates[this.UN] = newUsername;
    this.database.ref('users/usernames').update(updates);
    
    它几乎可以工作,但是现在子节点被替换了

    我改变了这个标题的问题,因为本质上我已经达到了这样的程度:我有了类似于
    users/usernames/myawesomeusername/{manychildren}
    的东西,我想在编辑myawesomeusername时保留孩子们

    编辑2:this.UN在onAuthStateChanged中填充,并在点击更新代码时更改。下面是这个.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
    来处理我需要应用程序其余部分的用户名的任何时候。

    this.UN的值是多少?@FrankvanPuffelen更新了一个解释,谢谢!您能否将问题简化为
    this.UN
    的硬编码值,而不是整个流程?@FrankvanPuffelen Hm的硬编码值是否表示要用字符串文字替换
    this.UN
    ?这会起作用,但是
    this.UN
    需要根据登录的用户进行更改。this.UN的值是多少?@FrankvanPuffelen更新了一个解释,谢谢!您能否将问题简化为
    this.UN
    的硬编码值,而不是整个流程?@FrankvanPuffelen Hm的硬编码值是否表示要用字符串文字替换
    this.UN
    ?这会起作用,但此.UN需要根据登录的用户进行更改。