从Firebase参考中删除第一个值?

时间:2017-06-17 07:49:25

标签: java firebase firebase-realtime-database

我正在寻找类似的东西:

final DatabaseReference ref = FirebaseDatabase.getInstance().getReferenceFromUrl("https://myproj.firebaseio.com/groceries");
ref.limitToFirst(1).removeValue();

不幸的是,ref.limitToFirst(1).removeValue();不存在,只有ref.removeValue()。我想只删除第一个值!我怎样才能做到这一点?我相信这很简单&简单。

1 个答案:

答案 0 :(得分:0)

removeValue()上只能DatabaseReference。致电limitToFirst(1)会返回Query,但未实现removeValue()

对该查询调用getRef()也不起作用,因为Query.getRef()返回执行查询的位置。换句话说,limitToFirst(1).getRef().removeValue()将删除整个位置,而不仅仅是第一个孩子。

要删除特定的子节点,首先需要为该子节点获取DatabaseReference。这要求您执行查询,因为只有这样您才能知道哪些子节点与查询匹配:

DatabaseReference ref = FirebaseDatabase.getInstance().getReferenceFromUrl("https://myproj.firebaseio.com/groceries");
Query query = ref.limitToFirst(1);
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
            childSnapshot.getRef().removeValue();
        }
    }

由于查询可能匹配多个子节点,因此需要getChildren()上的循环。虽然您的查询最多只匹配一个子节点,但通常可以有任意数量的结果,因此代码会处理该结果。