首页 > 解决方案 > 如何通过嵌套数据删除firebase中的父母?

问题描述

此类数据进入数据库

{
  "Markers" : {
    "brTRf3EfqzaWuaw0q42Ay8Jnj0F3" : {
      "-M5Tp8BZpUkJSbmV4Qya" : {
        "date" : "22, апр., 2020",
        "latitude" : "53.9150522051367",
        "longitude" : "27.440601512789726",
        "permission" : false,
        "time" : "01:21"
      },
      "-M5XhMon2UZiD6M_Zbp5" : {
        "date" : "22, апр., 2020",
        "latitude" : "53.914562076017575",
        "longitude" : "27.441855780780315",
        "permission" : false,
        "time" : "19:25"
      }
    }
  }
}

以用户的第一个条目为例:brTRf3EfqzaWuaw0q42Ay8Jnj0F3

他和他的父母在地图上做了一个标记:“-M5Tp8BZpUkJSbmV4Qya”,它包含一个带有时间数据的记录:“时间”:“01:21”

实际上的问题是:如何通过在其中记录时间来删除父记录“-M5Tp8BZpUkJSbmV4Qya”???

标签: javaandroidfirebasefirebase-realtime-database

解决方案


要根据查询删除父级,请执行以下操作:

DatabaseReference markerRef = FirebaseDatabase.getInstance().getReference().child("Markers");
markerRef.child("brTRf3EfqzaWuaw0q42Ay8Jnj0F3").orderByChild("time").equalTo("01:21").addListenerForSingleValueEvent(new ValueEventListener() {
         @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
          for(DataSnapshot data: dataSnapshot.getChildren()){
               data.getRef().removeValue();
                  }
            }

        @Override
       public void onCancelled(DatabaseError databaseError) {
                   throw databaseError.toException();
               }
          });

首先添加对节点的引用brTRf3EfqzaWuaw0q42Ay8Jnj0F3,然后使用orderByChild("time").equalTo("01:21")您可以创建查询来检索包含上述时间的节点。然后在内部迭代snapshots并使用getRef()您可以获得对该快照的源位置的引用。


推荐阅读