我目前正在开发一款严格使用Firebase作为后端的应用。在我的应用程序中,我想删除30条消息后写的第一条消息。换句话说,我想只允许存储30条消息。在我的firebase数据库中,我有一个名为“users”的节点,然后是一个用户ID的节点,然后在其中一个用户ID下,我有另一个名为items的节点。但是,我想删除items节点下的第一个子节点,但我不知道该子节点的名称,因为我使用.push()方法为它设置键。有人知道如何只删除第一个孩子吗?
我知道如何在Firebase中删除一个孩子,我只是不知道如何访问那个孩子。我尝试过以下几点:
DatabaseReference firstMessage = mDatabase.child("users").child(mUserId).child("items").getRef();
然后执行此操作以删除孩子。
firstMessage.removeValue();
我知道.child(“项目”)之后应该有一个额外的孩子,但我该如何获得该密钥?
编辑:我提出了一个解决方案,但它没有删除项目节点中的第一个子节点,而是删除了用户节点中的第一个子节点
DatabaseReference firstMessage = mDatabase.child("users").child(mUserId).child("items").orderByPriority().limitToFirst(1).getRef();
答案 0 :(得分:0)
您可以在onDataChange中尝试此操作,
for (DataSnapshot p : dataSnapshot.getChildren()) {
String childKey = p.getKey();
}
你可以通过这个获得所有孩子的所有关键。 你可以在arraylist中添加它们或做其他事情。
如果你想删除一些孩子, 使用
myRef.child("item").child("childKey_0").setValue(null);
==================================
2017年3月4日编辑:
我无法得到你的新问题。只是使用arrayList的一些例子。
ArrayList<String> childKey_list = new ArrayList<>();
for (DataSnapshot p : dataSnapshot.getChildren()) {
childKey_list.clear(); //clear the arrayList everytime the firebase refresh
String childKey = p.getKey();
childKey_list.add(childKey);
}
If (some_method_of_time) {
String delete_childID = childKey_list.get(0);
myRef.child("item").child(delete_childID).setValue(null);
}
答案 1 :(得分:0)
适用于iOS - Swift 4
self.ref.queryOrderedByPriority().queryLimited(toFirst: 1).observe(.value, with:{ snapshot in
guard let key = snapshot.value // as? [String:Any]
else {
print("Error")
return
}
print("key:",key)
//key has the first child of a node
})