首页 > Java > java教程 > 正文

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

Susan Sarandon
发布: 2024-10-28 05:24:02
原创
570 人浏览过

 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板