【问题标题】:On remove of last left child node, my respective firebase table gets deleted在删除最后一个左子节点时,我各自的 firebase 表被删除
【发布时间】:2017-12-07 07:29:22
【问题描述】:

我有一个场景,我有 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 数据库:

{
  "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"
    }
  },
}

【问题讨论】:

    标签: javascript json firebase firebase-realtime-database


    【解决方案1】:

    这对于 Firebase 来说是正常行为,因为它是基于节点的系统。当添加一个新的孩子时,该表将重新生成。 Firebase 这样做的原因是您没有空表(节点)。

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

    例如:

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

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

    一旦我向该客户添加新地址,地址节点就会重新创建。

    【讨论】:

    • 同意并体验到你提到的内容,但我有一个场景,我有一个专门监听代理节点的监听器,如果它找到了,那么它会完成其余的过程
    • 在我的模型中必须是这样,如果我在那里看到一些可用的东西,那么我必须将数据移动到其他表,从这里删除它..
    • 那你需要在查询地址节点的时候做个检查,看看有没有孩子。您可以使用addValueEventListener。检查此文档:firebase.google.com/docs/database/android/read-and-write 和此链接:stackoverflow.com/a/41154868/1116216
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2013-03-25
    • 2014-05-22
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多