如何删除具有相同名称的Firebase子节点?从一个节点获取要配置的密钥,并从另一个节点删除具有相同密钥的那些节点

时间:2020-05-07 09:47:37

标签: java android firebase firebase-realtime-database

我要删除所有具有相同名称的不同节点的子节点。我使用以下代码来获取要删除的子节点的密钥,并将其传递给另一个节点,但是它正在从两个节点(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实时数据库结构。

1 个答案:

答案 0 :(得分:1)

可以一次或一次将其删除;我只想从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();

编辑:

根据您的评论:

亲爱的亚历克斯,我想从surveyList中删除completedList中的所有子节点。 sld0000001和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);