如何删除同名的firebase子节点? 从一个节点上获取要删除的key,然后从另一个节点上删除同名key的节点。

问题描述 投票:1回答:1

我想删除所有的子节点,形成具有相同名称的不同节点,我使用下面的代码来获取要删除的子节点的键,并将其传递给另一个节点,但它从两个节点中删除它们()。我使用了下面的代码来获取要删除的子节点的键,并将其传递给另一个节点,但它从两个节点中删除了它们(completedSurveyssurveyList).

DatabaseReference dr_completedSurveys = firebaseDatabase.getReference("users").child(userId).child("completedSurveys");
    dr_completedSurveys.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            StringBuilder stringBuilder = new StringBuilder();
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                stringBuilder.append(ds.getKey()).append("\n");
                String completedSurveys = stringBuilder.toString();
                String[] lines = completedSurveys.split("\n");
                for (String line : lines) {
                    //Toast.makeText(HomePage.this, line, Toast.LENGTH_SHORT).show();
                    String compSurList = line;
                    DatabaseReference dr_completed = FirebaseDatabase.getInstance().getReference("users").child(userId);
                    dr_completed.child("surveyList").child(compSurList).removeValue();
                }
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

enter image description here

下面附上的是firebase实时数据库结构。

java android firebase firebase-realtime-database
1个回答
1
投票

可以一个一个删除,也可以一次删除,我只想删除所有在两个DB上找到的名字。surveyList.

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference completedSurveysRef = rootRef.child("users").child(uid).child("completedSurveys");

现在删除所有在 completedSurveys 节点,您应该使用以下代码行。

completedSurveysRef.removeValue();

如果你想分别删除每个子节点,请使用下面的代码行。

completedSurveysRef.child("sld0000001").removeValue();
completedSurveysRef.child("sld0000002").removeValue();

编辑:

根据你的评论:

亲爱的Alex,我想删除所有的子节点从 surveyListsld0000001和sld0000002都在完成列表中。completedList 和surveyList,所以我想把这些值从 surveyList 非来自 comletedList.

请使用以下代码。

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference completedSurveysRef = rootRef.child("users").child(uid).child("completedSurveys");
DatabaseReference surveyListRef = rootRef.child("users").child(uid).child("surveyList");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String surveyId = ds.getKey();;
            surveyListRef.child(surveyId).removeValue();
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
completedSurveysRef.addListenerForSingleValueEvent(valueEventListener);
© www.soinside.com 2019 - 2024. All rights reserved.