【问题标题】:Firebase query delete specific value from databaseFirebase 查询从数据库中删除特定值
【发布时间】:2018-01-19 11:55:29
【问题描述】:

我的 firebase 上有这些数据:

transportation: {
"car" : {
    "bus" : {
      "toyota" : false,
      "bmw" : true
    },
    "suv" : {
      "honda" : false,
      "toyota" : true,
    }
  }
}

我想删除所有具有“假”值数据的子项,以便我的数据如下所示:

transportation: {
    "car" : {
        "bus" : {

          "bmw" : true
        },
        "suv" : {

          "toyota" : true,
        }
      }
    }

【问题讨论】:

    标签: javascript json firebase firebase-realtime-database


    【解决方案1】:

    这是代码,

      var ref = firebase.database().ref().child('transportation/')
       ref.once("value")
      .then(function(snapshot) {
      data = snapshot.val();
            for (var i=0;i < Object.keys(data).length;i++){
                Object.keys(data)[i].forEach(function(childSnapshot) {
                  if(childSnapshot.val() == "false"){
                      childSnapshot.ref.remove();
                    }
                  });
            }
      }).catch(function(error) {alert("Data could not be deleted." + error);}););
    

    【讨论】:

    • 我认为这是错误的!因为childSnapshot.val() == "false" 不是正确的数据路径。 childSnapshot.val() 将给出一个对象car:{... 并且不能与false 进行比较。即使是一层深也会给另一个对象。
    • @HakanC 感谢您的评论..!我已经更新了我的代码..!
    【解决方案2】:

    为了从 fairbase 中删除记录及其值,下面可能会起作用:

    var dB = firebase.database()
    dB.ref('transportation/car').once('value', snap={
         snap.forEach(s =>{
            var obj =s.val();
            var keys = s.key;
              for (var key in obj ) {
                if (!obj[key]) {
                   // In order to delete:  set the path null
                   dB.ref('transportation/car/' + keys + "/" + key).set(null);
                }   
              }
    
        }); 
    });
    

    【讨论】:

      【解决方案3】:

      删除具有特定值的数据,在您的情况下 false 。我们需要获取一个节点的所有数据,然后使用键映射数据以删除具有值为false的对象的确切值的数据。

      let transportationRef = firebase.database().ref().child('transportation/')
        transportationRef.child("car").once('value', s => {
          if (s.exists()) {
            // map through objects returned from transportationRef and map through the objects
            Object.keys(s.val()).map(k => {
                // deleting the node which contains `false` as value
                if(s.val()[k]=="false"){
                  s.ref.remove()
                }
            })
          }
      })
      

      【讨论】:

        猜你喜欢
        • 2017-02-01
        • 1970-01-01
        • 2019-01-24
        • 1970-01-01
        • 2020-06-06
        • 1970-01-01
        • 1970-01-01
        • 2018-07-16
        相关资源
        最近更新 更多