首页  >  文章  >  Java  >  如何删除 Firestore 中的整个集合和子集合?

如何删除 Firestore 中的整个集合和子集合?

Susan Sarandon
Susan Sarandon原创
2024-10-28 05:24:02460浏览

 How to Delete Entire Collections and Subcollections in Firestore?

删除 Firestore 中的集合和子集合

Firestore 不提供删除整个集合或子集合的直接方法。但是,有一个解决方法,涉及删除集合或子集合中的各个文档。

建模数据结构

提供的数据结构适合给定的用例。无需重组数据库即可删除特定列表。

删除集合或子集合的步骤

要删除整个集合或子集合,请按照以下步骤操作:

  1. 从子集合中检索文档:
    从要删除的集合的子集合中检索所有文档。
  2. 删除子集合文档:
    从步骤 1 中检索到的子集合中删除所有文档。
  3. 删除集合文档:
    从要删除的集合中删除文档。

批处理(可选)

对于较大的集合,请考虑批量删除文档以避免内存问题。

安全和性能影响

由于潜在的负面安全和性能影响,Firestore 不鼓励进行大型删除操作。请谨慎执行这些操作,尤其是在不受信任的环境中。

Android 实现代码

<code class="java">private void deleteCollection(final CollectionReference collection, Executor executor) {
    Tasks.call(executor, () -> {
        int batchSize = 10;
        Query query = collection.orderBy(FieldPath.documentId()).limit(batchSize);
        List<DocumentSnapshot> deleted = deleteQueryBatch(query);

        while (deleted.size() >= batchSize) {
            DocumentSnapshot last = deleted.get(deleted.size() - 1);
            query = collection.orderBy(FieldPath.documentId()).startAfter(last.getId()).limit(batchSize);

            deleted = deleteQueryBatch(query);
        }

        return null;
    });
}

@WorkerThread
private List<DocumentSnapshot> deleteQueryBatch(final Query query) throws Exception {
    QuerySnapshot querySnapshot = Tasks.await(query.get());

    WriteBatch batch = query.getFirestore().batch();
    for (DocumentSnapshot snapshot : querySnapshot) {
        batch.delete(snapshot.getReference());
    }
    Tasks.await(batch.commit());

    return querySnapshot.getDocuments();
}</code>

以上是如何删除 Firestore 中的整个集合和子集合?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn