如何在Firebase云数据库中删除两个文档?

时间:2020-08-06 11:30:27

标签: android firebase google-cloud-firestore

我编写了以下代码,该代码从Cloud Firebase数据库中删除了两个文档:

fireDB.document(groupPath).collection("users").document(phoneNumber).delete().addOnSuccessListener(new OnSuccessListener<Void>() {

            @Override
            public void onSuccess(Void aVoid) {
                fireDB.collection("users").document(phoneNumber).delete().addOnSuccessListener(new OnSuccessListener<Void>() {

                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(this.getClass().getName(), "DocumentSnapshot successfully deleted");
                        Toast.makeText(getApplicationContext(),R.string.successfully_deleted_user,Toast.LENGTH_LONG).show();
                        finish();
                    }
                }).addOnFailureListener(new OnFailureListener() {

                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(this.getClass().getName(), "Error deleting document", e);
                        Toast.makeText(getApplicationContext(),R.string.failed_to_delete_user,Toast.LENGTH_LONG).show();
                    }
                });
                Log.d(this.getClass().getName(), "DocumentSnapshot successfully deleted");
            }
        }).addOnFailureListener(new OnFailureListener() {

            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(this.getClass().getName(), "Error deleting document", e);
                Toast.makeText(getApplicationContext(),R.string.failed_to_delete_user,Toast.LENGTH_SHORT).show();
            }
        });

该代码的问题在于,它先删除第一个文档,然后再删除第二个文档,这意味着如果第一次尝试将成功删除它,而第二个尝试将无法删除它,那将会出现问题。是否可以删除Firebase云数据库中的两个文档,所以结果可能是以下两个选项的结果:

  1. 两个文档都被删除。
  2. 两个文档均未删除。

有可能吗?

1 个答案:

答案 0 :(得分:1)

正如robsiemb所说,您将为此使用batch write or transaction

据我所知,代码中的等效内容如下:

// Get a new write batch
WriteBatch batch = db.batch();

DocumentReference docRef1 = fireDB.document(groupPath).collection("users").document(phoneNumber);
DocumentReference docRef2 = fireDB.collection("users").document(phoneNumber)
DocumentReference laRef = db.collection("cities").document("LA");
batch.delete(docRef1);
batch.delete(docRef2);

// Commit the batch
batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        // ...
    }
});