使用Firebase中的push()键删除第一个孩子

时间:2017-04-02 03:11:06

标签: android firebase firebase-realtime-database push message

我目前正在开发一款严格使用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();

2 个答案:

答案 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
    })