获取firestore中已删除文档的ID

zvms9eto  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(386)

我有一个很大的收藏,里面有几千份文件。这些文档具有子集合,其中包含文档。现在我删除了很多最高层的文件。
结构: MyCollection => MyDocument => MySubcollection => MySubdocument 现在我意识到,文件被删除了(没有在任何查询中显示),但是子集合及其文档仍然存在。现在我不知道如何删除它们,因为我不知道我删除的文件的id。
当我试图通过向我的集合发送一个查询来读取所有文档来找出id时,删除的文档(按设计)就不再包含了。那么我现在如何计算出它们的id来删除它们的子集合呢?
谢谢你的建议!

5fjcxozz

5fjcxozz1#

这完全取决于你的确切目标。
如果要删除 MyCollection 集合,包括所有子集合中的所有文档,可以通过以下命令使用firebase cli:

firebase firestore:delete MyCollection -r

firebase firestore:delete --help 更多选择。
当然,这只能由firebase项目的所有者完成。
如果您希望允许其他用户从前端执行相同的操作(即所有文档,包括所有子集合),可以使用文档中“使用可调用云函数删除数据”部分中详细介绍的技术。
如本文件所述:
你可以利用 firestore:delete firebase命令行界面(cli)中的命令。您可以使用 firebase-tools 包裹。
firebase cli使用cloud firestore restapi查找指定路径下的所有文档并分别删除它们。此实现不需要了解应用程序的特定数据层次结构,甚至可以查找和删除不再有父级的“孤立”文档。
如果只想删除 MyCollection 集合与子集合中的文档一起,您可以使用与上面相同的方法,使用指向文档的路径,例如:

firestore:delete MyCollection/MyDocument -r

最后,如果您的问题是您已经删除了“父”文档,并且您不知道如何删除(孤立)子集合中的文档(因为您不知道父集合的id),那么您可以使用集合组查询来查询所有子集合 MySubcollection 子集合并检测父文档是否存在。下面的代码,在javascript中,可以做到这一点。

const db = firebase.firestore();
  const parentDocReferences = [];
  const deletedParentDocIds = [];

  db.collectionGroup('MySubcollection')
    .get()
    .then((querySnapshot) => {
      querySnapshot.forEach((doc) => {
        console.log(doc.id);
        console.log(doc.ref.parent.parent.path);
        parentDocReferences.push(db.doc(doc.ref.parent.parent.path).get());
      });
      return Promise.all(parentDocReferences);
    })
    .then((docSnapshots) => {
      docSnapshots.forEach((doc) => {
        console.log(doc.id);
        console.log(doc.exists);
        if (!doc.exists && deletedParentDocIds.indexOf(doc.id) === -1) {
          deletedParentDocIds.push(doc.id);
        }
      });

      // Use the deletedParentDocIds array
      // For example, get all orphan subcollections reference in order to delete all the documents in those collections (see https://firebase.google.com/docs/firestore/manage-data/delete-data#collections)
      deletedParentDocIds.forEach(docId => {

        const orphanSubCollectionRef = db.collection(`MyCollection/${docId}/MySubcollection`);
        // ...

      });

    });

相关问题