首页 > 解决方案 > 如何检查 Firebase Firestore 重复条目是否已存在?

问题描述

当 FirebaseFirestore 中已存在文档时,我需要更新条目这是我的代码

 call.enqueue(new Callback<DoctorsResponse>() {
            @Override
            public void onResponse(@NonNull Call<DoctorsResponse> call, @NonNull Response<DoctorsResponse> response) {
                progressDialog.setTitle("Uploading...");
                progressDialog.show();

                if (response.isSuccessful()){
                    Log.e("@@Success", String.valueOf(response.body().getData()));

                    docDetailsList.addAll(response.body().getData().getMemberData());
                    MemberDatum memberDatum = new MemberDatum();

                    for (int i =0; i<response.body().getData().getMemberData().size(); i++){

                        String queryforbranch = FirebaseFirestore.getInstance().collection("BranchWiseList").document().getId();


                        memberDatum.setDoctorId(queryforbranch);
                        memberDatum.setMbbsCollegeName(docDetailsList.get(i).getMbbsCollegeName());
                        memberDatum.setMbbsYear(docDetailsList.get(i).getMbbsYear());
                        memberDatum.setId(docDetailsList.get(i).getId());
                        memberDatum.setWuid(docDetailsList.get(i).getWuid());
                        memberDatum.setDocName(docDetailsList.get(i).getDocName());
                        memberDatum.setDocFatherName(docDetailsList.get(i).getDocFatherName());
                        memberDatum.setDocbloodGroup(docDetailsList.get(i).getDocbloodGroup());
                        memberDatum.setDocAddress(docDetailsList.get(i).getDocAddress());
                        memberDatum.setDocDistrict(docDetailsList.get(i).getDocDistrict());
                        memberDatum.setDocState(docDetailsList.get(i).getDocState());
                        memberDatum.setDocPrimaryMob(docDetailsList.get(i).getDocPrimaryMob());
                        memberDatum.setDoctDesignation(docDetailsList.get(i).getDoctDesignation());
                        memberDatum.setDocEmail(docDetailsList.get(i).getDocEmail());
                        memberDatum.setRmcNumber(docDetailsList.get(i).getRmcNumber());
                        memberDatum.setImaMember(docDetailsList.get(i).getImaMember());
                        memberDatum.setDocPopularName(docDetailsList.get(i).getDocPopularName());
                        memberDatum.setRmcRegistrationDate(docDetailsList.get(i).getRmcRegistrationDate());
                        memberDatum.setDocDob(docDetailsList.get(i).getDocDob());
                        memberDatum.setBranch(docDetailsList.get(i).getBranch());
                        memberDatum.setDateOfMarriage(docDetailsList.get(i).getDateOfMarriage());
                        memberDatum.setDocCity(docDetailsList.get(i).getDocCity());
                        memberDatum.setDocSpeciality(docDetailsList.get(i).getDocSpeciality());
                        memberDatum.setDocgender(docDetailsList.get(i).getDocgender());
                        memberDatum.setDoctCategory(docDetailsList.get(i).getDoctCategory());
                        memberDatum.setDoctImage(docDetailsList.get(i).getDoctImage());
                        memberDatum.setEmployeetype(docDetailsList.get(i).getEmployeetype());
                        memberDatum.setHospitalAbout(docDetailsList.get(i).getHospitalAbout());
                        memberDatum.setHospitalAddress(docDetailsList.get(i).getHospitalAddress());
                        memberDatum.setHospitalDistrict(docDetailsList.get(i).getHospitalDistrict());
                        memberDatum.setHospitalEmail(docDetailsList.get(i).getHospitalEmail());
                        memberDatum.setHospitalImageOne(docDetailsList.get(i).getHospitalImageOne());
                        memberDatum.setHospitalImageTwo(docDetailsList.get(i).getHospitalImageTwo());
                        memberDatum.setHospitalImageThree(docDetailsList.get(i).getHospitalImageThree());
                        memberDatum.setHospitalImageFour(docDetailsList.get(i).getHospitalImageFour());
                        memberDatum.setHospitalImageFive(docDetailsList.get(i).getHospitalImageFive());
                        memberDatum.setHospitalImageSix(docDetailsList.get(i).getHospitalImageSix());
                        memberDatum.setHospitalName(docDetailsList.get(i).getHospitalName());
                        memberDatum.setHospitalPhone(docDetailsList.get(i).getHospitalPhone());
                        memberDatum.setHospitalSpecilities(docDetailsList.get(i).getHospitalSpecilities());
                        memberDatum.setHospitalState(docDetailsList.get(i).getHospitalState());
                        memberDatum.setHospitalWebsite(docDetailsList.get(i).getHospitalWebsite());
                        memberDatum.setIsIMAMember(docDetailsList.get(i).getIsIMAMember());
                        memberDatum.setHospitalWebsite(docDetailsList.get(i).getHospitalWebsite());
                        memberDatum.setAddSpecialityModels(docDetailsList.get(i).getAddSpecialityModels());
                        memberDatum.setOrganizationModels(docDetailsList.get(i).getOrganizationModels());
                        memberDatum.setSuperSpecialityModels(docDetailsList.get(i).getSuperSpecialityModels());

                        Log.e("@@Docname",docDetailsList.get(i).getDocName() );



                        FirebaseFirestore.getInstance().collection("BranchWiseList").document(memberDatum.getDoctorId()).set(memberDatum).addOnCompleteListener(task -> {


                            if (task.isSuccessful()) {
                                progressDialog.dismiss();


                            } else {
                                Toast.makeText(ImportBranchWise.this, "Something went wrong", Toast.LENGTH_SHORT).show();
                            }
                        });

当我再次点击 Api 时,我得到了具有不同文档 ID 的双重条目,它没有更新我已经尝试过更新查询,帮助我,我将不胜感激 StackOverflow 上的每一个回复,提前谢谢你

标签: androidfirebasegoogle-cloud-firestore

解决方案


你可以使用update,而不是set因为你总是使用 id 反正。

String queryforbranch = FirebaseFirestore.getInstance().collection("BranchWiseList").document().getId();

我不知道您执行此操作时会得到什么文件,但似乎每次都得到相同的文件。我相信您需要将文档的 ID 保存在其他地方,或者只是调用get()而不是document()获取集合中的所有文档。

例如:

FirebaseFirestore.getInstance().collection("BranchWiseList")
.get().addOnCompleteListener(task -> {
            if(task.isSuccessful()){
                QuerySnapshot querySnapshot = task.getResult();
                assert querySnapshot != null;
                for (DocumentSnapshot documentSnapshot:
                        querySnapshot.getDocuments()) {
                    documentSnapshot.getID()
                    // here you can get everything done with the id. 
                }
            }
        });

推荐阅读