在删除最后一个左子节点时,我的相应firebase表将被删除

时间:2017-12-07 07:29:23

标签: javascript json firebase firebase-realtime-database

我有一个场景,我有firebase json db,其中我有一个代理的json对象。在这里,如果我删除最后一个左子节点,那么表(节点)代理也会被删除。

如果我删除剩下的最后一个孩子,我怎么能限制这个代理(父节点)不会被删除,或者,如何在删除最后一个左边后重新创建父节点(代理)子节点?

以下是我通过代码进行的操作:

    FriendlyChat.prototype.signOut = function () {

      var userdetails = this.auth.currentUser;

      this.database.ref('agents').child(userdetails.displayName).remove();

      this.auth.signOut();
    };

FriendlyChat.prototype.onAuthStateChanged = function (user) {

  if (user) { // User is signed in!
    // Get profile pic and user's name from the Firebase user object.
    //console.log(user);
    var profilePicUrl = user.photoURL;
    var userEmail = user.email;
    var userName = user.displayName;
    this.agentsRef = this.database.ref('agents');
    var loginTime = Math.floor(new Date().getTime() / 1000);


    this.agentsRef.child(userName).set({
      emailId: userEmail,
      login_time: loginTime,
      name: userName
    })

  } else { // User is signed out!
    // Hide user's profile and sign-out button.
// Something happens

  }
};

Firebase DB:

{
  "agents" : {
    "test test" : {
      "emailId" : "testrbcdemo@gmail.com",
      "login_time" : 7686887,
      "name" : "test test"
    }
  },
  "engagedUsers" : {
    "qwe" : {
      "agent_availability" : true,
      "conv_id" : "testrbcdemo_qwe",
      "emailId" : "qwe@gmail.com",
      "login_time" : 66565656,
      "name" : "qwe",
      "uid" : "adasfklsfjdskldgsgjgjkl"
    }
  },
}

1 个答案:

答案 0 :(得分:1)

这是Firebase的正常行为,因为它是基于节点的系统。添加新子项时,表将重新生成。 Firebase执行此操作的原因是您没有空表(节点)。

Firebase的工作方式是检查节点是否已存在,如果不存在,则重新创建节点。如果存在,则将键值对添加为该节点的子节点。这意味着无论您有多少个节点,最终都需要最终得到一个键值对。

例如:

 - Customer
     - Address
         - AddressLine1: The Hive
         - AddressLine2: Southampton Ave
         - AddressLine3: New York
         - Country: USA

在上面的示例中,地址节点包含以4个子节点分隔的数据。如果我删除AddressLine1,AddressLine2,AddressLine3和Country,则会自动删除Address节点,因为它没有子节点。

我向该客户添加新地址后,将重新创建地址节点。