获取Firestore中已删除文档的ID

前卫新手

我收藏了数千份文件。这些文档包含带有内部文档的子集合。现在,我删除了许多最高级别的文档。

结构体: MyCollection => MyDocument => MySubcollection => MySubdocument

现在我意识到,这些文件已删除(在任何查询中均未显示),但是子集合及其文档仍然存在。现在,我不确定如何删除它们,因为我不知道已删除文档的ID。

当我尝试通过仅向我的收藏夹发送查询以读取所有文档来查找ID时,(根据设计)已删除的文档不再包括在内。那么,我现在如何找出他们的ID来删除其子集合?

感谢您的任何建议!

雷诺·塔内克(Renaud Tarnec)

这完全取决于您的确切目标。

如果你想删除所有的在文档MyCollection集,包括所有的文件,所有的子集,您可以用火力地堡CLI使用以下命令:

firebase firestore:delete MyCollection -r

firebase firestore:delete --help更多选择。

当然,这只能由Firebase项目的所有者完成。


如果要允许其他用户从前端执行相同的操作(即,所有文档,包括所有子集合),则可以使用“删除带有可调用云函数的数据”部分详细介绍的技术。该文档。

如本文档所述:

您可以firestore:delete在Firebase命令行界面(CLI)中利用该命令。您可以使用该firebase-tools软件包将Firebase CLI的任何功能导入到Node.js应用程序中。

Firebase CLI使用Cloud Firestore REST API查找指定路径下的所有文档,并将其分别删除。此实现不需要您的应用程序的特定数据层次结构知识,甚至可以查找和删除不再具有父级的“孤立”文档。


如果您只想删除集合中文档的一个子集以及子集合中的文档,则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`);
        // ...
        
      });
      
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章