2016-07-31 64 views
3

只是一个小问题,删除值:
现在我有这个结构
如何火力

images 
---- uniqueId 
-------- id_logement : 1747657 
-------- image : dataimage 
---- uniqueId 
-------- id_logement : 1747657 
-------- image : dataimage 
---- uniqueId 
-------- id_logement : 985445234 
-------- image : dataimage 

而且它的更好!谢谢 !!但:
如何删除id_logement = 1747657的所有图像?
我试过

 firebase.database().ref('logements/'+key).remove(); 
     firebase.database().ref('geofire/'+key).remove(); 
     firebase.database().ref('images').child('id_logement').equalTo(key).remove(); 

与关键= 1747657但没有成功的图片!这UniqueId让我紧张!请你能给我多些建议吗?非常感谢你

+0

嘿巴勃罗,只是增加了一个答案。对延迟抱歉。问候。 :) – adolfosrs

回答

6

,你需要首先检索并删除它设置其值为null并承诺更改为update

let ref = firebase.database().ref('images'); 
ref.orderByChild('id_logement').equalTo(key).once('value', snapshot => { 
    let updates = {}; 
    snapshot.forEach(child => updates[child.key] = null); 
    ref.update(updates); 
}); 

工作jsFiddle

+0

这就是我一直在寻找的!现在我可以在一次中删除(设置为空)!非常感谢你 ! –

+0

如果我们想要删除特定的数据节点,该怎么办? – BhargavSushant

+0

@BhargavSushant ref('node')。remove()? – adolfosrs

1

试试这个代码: - 既然你要基于查询到批量删除数据

rootRef.child("images").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      for(DataSnapshot dataSnapshot : snapshot.getChildren()) 
      { 
       if(dataSnapshot.child("id_logement").getValue().toString().equals("1747657")) 
       { 
        dataSnapshot.getRef().setValue(null); 
       } 
      }   
     } 
     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
     } 
    }); 
+1

很好的答案。但是OP正在寻找一种JavaScript解决方案,由于缺乏平台标签,所以很容易忽略。 –

3

实际上有一个更简单的方法。

只要打电话给ref财产快照,并使用.on('child_added',...)

var ref = firebase.database().ref('images'); 
ref.orderByChild('id_logement').equalTo(key).on('child_added', (snapshot) => { 
    snapshot.ref.remove() 
}); 
+0

好的。尽管这使得代码看起来很小,但我认为这不是性能方面的最佳选择,并且可能导致不期望的行为。这个代码将为每个被移除的子节点调用'remove',而我提供的解决方案只调用一次'update'。另外,由于这是一个观察者,您将会监听任何其他添加的孩子,并将删除刚刚添加的节点。 – adolfosrs