Firestore根据条件执行删除

时间:2018-03-07 05:13:36

标签: java android firebase google-cloud-firestore

我有没有办法在Firestore文件上执行删除 field1 = x field2 = y?

我看到删除功能,但没有附带的地方。 如果我使用事务然后有get和delete但是get似乎不接受“where”子句。

我希望我遗漏了文档中的内容。

由于

2 个答案:

答案 0 :(得分:4)

要实现此目的,您需要先创建所需的查询,然后只使用delete()方法,如下所示:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference itemsRef = rootRef.collection("yourCollection");
Query query = itemsRef.whereEqualTo("field1", "x").whereEqualTo("field2", "y");
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull 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());
        }
    }
});

答案 1 :(得分:0)

这是我从Firestore查询和删除文档的方法。首先,它查询数据,然后将其删除。 请注意,此方法必须适用于整数/双精度值。

    public void whereQueryDelete(final String collection, final String field, final String value) {
    mFirestoreDatabase.collection(collection)
            .whereEqualTo(field, value)
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull 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)
                                    .delete()
                                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                                        @Override
                                        public void onSuccess(Void aVoid) {
                                            Log.d(TAG, "DocumentSnapshot successfully deleted!");
                                        }
                                    })
                                    .addOnFailureListener(new OnFailureListener() {
                                        @Override
                                        public void onFailure(@NonNull Exception e) {
                                            Log.w(TAG, "Error deleting document", e);
                                        }
                                    });
                        }
                    } else {
                        Log.d(TAG, "Error getting documents: ", task.getException());
                    }
                }
            });
}