Firestore根据条件执行删除操作。

11 浏览
0 Comments

Firestore根据条件执行删除操作。

是否有一种方法可以对Firestore文档执行删除操作,其中field1 = xfield2 = y?

我看到了删除函数,但没有附带where子句。

如果我使用事务,那么有get和delete,但是get似乎不接受"where"子句。

希望我在文档中有所遗漏。

谢谢。

0
0 Comments

Firestore perform delete based on condition的问题是,无论文档是否存在,删除方法始终返回onSucefful。

这个问题的原因是,在whereQueryDelete方法中,首先通过查询条件获取文档数据,然后删除文档。但是,删除文档的方法不会检查文档是否存在,而是始终返回成功。这意味着,即使文档不存在,也会返回成功。

为了解决这个问题,可以在删除文档之前先检查文档是否存在。可以使用exists()方法来检查文档是否存在,如果存在再进行删除操作。修改的代码如下:

public void whereQueryDelete(final String collection, final String field, final String value) {
    mFirestoreDatabase.collection(collection)
            .whereEqualTo(field, value)
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                public void onComplete( Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            Log.d(TAG, document.getId() + " => " + document.getData());
                            String idDelete = document.getId();
                            mFirestoreDatabase.collection(collection).document(idDelete)
                                    .get()
                                    .addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                                        public void onComplete( Task<DocumentSnapshot> task) {
                                            if (task.isSuccessful() && task.getResult().exists()) {
                                                mFirestoreDatabase.collection(collection).document(idDelete)
                                                        .delete()
                                                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                                                            public void onSuccess(Void aVoid) {
                                                                Log.d(TAG, "DocumentSnapshot successfully deleted!");
                                                            }
                                                        })
                                                        .addOnFailureListener(new OnFailureListener() {
                                                            public void onFailure( Exception e) {
                                                                Log.w(TAG, "Error deleting document", e);
                                                            }
                                                        });
                                            }
                                        }
                                    });
                        }
                    } else {
                        Log.d(TAG, "Error getting documents: ", task.getException());
                    }
                }
            });
}

通过在删除文档之前先获取文档,然后检查文档是否存在,可以确保只有存在的文档才会被删除。这样就解决了Firestore perform delete based on condition的问题。

0
0 Comments

Firestore基于条件执行删除操作的原因是我们想要根据特定条件从Firebase Firestore数据库中删除文档。为了实现这一目标,我们需要创建所需的查询,然后使用delete()方法执行删除操作。

以下是解决这个问题的方法:

1. 首先,我们需要创建一个查询对象query,该对象使用whereEqualTo()方法指定要匹配的字段和值。

2. 然后,我们使用query.get()方法执行查询,并通过addOnCompleteListener()方法监听查询结果。

3. 在查询结果返回后,我们遍历返回的文档列表,并使用itemsRef.document(document.getId()).delete()方法删除每个文档。

4. 如果删除操作成功,我们可以显示一条成功的消息给用户。如果删除操作失败,我们可以记录错误信息。

以下是实现该功能的代码示例:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference itemsRef = rootRef.collection("yourCollection");
Query query = itemsRef.whereEqualTo("field1", "x").whereEqualTo("field2", "y");
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    public void onComplete( Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (DocumentSnapshot document : task.getResult()) {
                itemsRef.document(document.getId()).delete();
            }
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});

另外,如果我们想要在所有删除操作完成后显示一条消息给用户,我们可以在每个delete()方法后添加addOnCompleteListener()方法,然后嵌套处理响应。

此外,我们还可以将所有删除操作添加到一个批处理batch中,以提高效率。这样可以减少与服务器的通信次数。

希望这篇文章对你理解Firestore基于条件执行删除操作的原因和解决方法有所帮助。

0