如何在Firestore中删除多个具有不同ID的文档?

时间:2018-09-08 16:50:28

标签: android google-cloud-firestore

我搜索了多个具有不同ID的文档,我需要实现某种方法来删除所有文档,因此我搜索了一下,所以我想应该使用批处理的方法。 所以我的数据库就是这个Image

所以我能够在这样的数组列表中获取我的文档ID。

[0Y5rfMK3duHBUTN9XsO5、2Q70mSjNxkAoUMDAJ8rz等...]

和我的代码:

WriteBatch batch = db.batch();
DocumentReference myRef = db.collection("Collection").document(String.valueOf(idsList));
batch.delete(myRef);
batch.commit();

但这是行不通的,所以如果遗漏了一点步骤,或者如果有其他方法可以执行,那么将其写下来将非常感激。

2 个答案:

答案 0 :(得分:0)

Ref:https://firebase.google.com/docs/firestore/manage-data/delete-data

for (String DocId : yourListObject) {
    db.collection("Collection").document(String.valueOf(docID))
            .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);
                }
            });
    }
  

删除收藏集

要在Cloud Firestore中删除整个集合或子集合,请检索集合或子集合中的所有文档并将其删除。如果您有较大的馆藏,则可能要分批删除文档,以避免内存不足的错误。重复该过程,直到您删除了整个集合或子集合。

删除集合需要协调无数个单独的删除请求。如果需要删除整个集合,请仅从受信任的服务器环境中删除。虽然可以从移动/ Web客户端删除集合,但是这样做会对安全性和性能造成负面影响。

    /** Delete a collection in batches to avoid out-of-memory errors.
 * Batch size may be tuned based on document size (atmost 1MB) and application requirements.
 */
void deleteCollection(CollectionReference collection, int batchSize) {
  try {
    // retrieve a small batch of documents to avoid out-of-memory errors
    ApiFuture<QuerySnapshot> future = collection.limit(batchSize).get();
    int deleted = 0;
    // future.get() blocks on document retrieval
    List<QueryDocumentSnapshot> documents = future.get().getDocuments();
    for (QueryDocumentSnapshot document : documents) {
      document.getReference().delete();
      ++deleted;
    }
    if (deleted >= batchSize) {
      // retrieve and delete another batch
      deleteCollection(collection, batchSize);
    }
  } catch (Exception e) {
    System.err.println("Error deleting collection : " + e.getMessage());
  }
}

有关更多信息,请访问https://firebase.google.com/docs/firestore/manage-data/delete-data

答案 1 :(得分:0)

您将必须遍历列表,并分别为每个列表创建一个DocumentReference。 DocumentReference只能引用单个文档,而不能引用文档列表:

WriteBatch batch = db.batch();

for (String id : idsList) {
    DocumentReference ref = db.collection("Collection").document(id);
    batch.delete(ref);
}

batch.commit();