我正在寻找类似的东西:
final DatabaseReference ref = FirebaseDatabase.getInstance().getReferenceFromUrl("https://myproj.firebaseio.com/groceries");
ref.limitToFirst(1).removeValue();
不幸的是,ref.limitToFirst(1).removeValue();
不存在,只有ref.removeValue()
。我想只删除第一个值!我怎样才能做到这一点?我相信这很简单&简单。
答案 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()
上的循环。虽然您的查询最多只匹配一个子节点,但通常可以有任意数量的结果,因此代码会处理该结果。