无法从Android中的Firebase删除节点

时间:2016-12-28 06:49:11

标签: android firebase firebase-realtime-database

我想从Firebase数据库中删除Room2节点。我有这个数据库结构:

db-24f7f
 |
 - Hotel
       |
    -Room1
         |
          beds:"2"
          Chairs: "6"
    -Room2
         |
         beds:"3"
         Chairs: "8"

我试过

database = FirebaseDatabase.getInstance();
myRef = database.getReference();
database.getReference("Hotel").orderByChild("Chairs").equalTo("8").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
           dataSnapshot.getRef().setValue(null);
    }

删除整个数据库。然后我尝试了

database = FirebaseDatabase.getInstance();
myRef = database.getReference();
database.getReference("Hotel").orderByChild("Chairs").equalTo("8").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
               for(DataSnapshot ds:dataSnapshot.getChildren()){
                    ds.getRef().removeValue();
                }
            }

找到这个:

  

12-28 12:31:21.813 22950-22950 / PKGName_o E / ViewRootImpl:sendUserActionEvent()mView == null   12-28 12:31:21.813 22950-22950 / PKGName_o E / ViewRootImpl:sendUserActionEvent()mView == null   W / PersistentConnection:pc_0 - 使用未指定的索引。考虑添加'" .indexOn":"主席"'在酒店使用您的安全和Firebase数据库规则以获得更好的性能

此后,该节点不会从Firebase中删除。为什么它无法删除节点?

1 个答案:

答案 0 :(得分:1)

在房间节点下添加房间密钥。

db-24f7f
 |
 - Hotel
       |
    -Room1
         |
          beds:"2"
          roomKey: "Room1"
          Chairs: "6"
    -Room2
         |
         beds:"3"
         roomKey: "Room2"
         Chairs: "8"

现在参考' Hotel'。

DatabaseReference hotelRef = myRef.child("Hotel");

如果您只想删除Room2,请将Room2的值设置为null -

hotelRef.child("Room2").setValue(null);

如果你想删除所有带8把椅子的房间,那么 -

hotelRef.orderByChild("Chairs").equalTo("8").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                   for(DataSnapshot ds:dataSnapshot.getChildren()){
                        String roomKey = (String) ds.child(roomKey).getValue();
                        hotelRef.child(roomKey).setValue(null);
                    }
                }