Firestore查询已删除文档上的子集合

eik*_*ooc 3 firebase firebase-console google-cloud-firestore

使用Firebase控制台时,可以查看所有文档和集合,甚至是路径中不存在“文档”的子集合。

这在此处包括的图片中以及在文档和屏幕截图中均已说明。这些文档不会出现在查询或快照中。那么,当查询未返回嵌套的子集合时,控制台如何找到它们呢? 该图显示了Firebase控制台

是否有可能以某种方式列出这些文件。由于控制台可以做到,因此似乎必须有一种方法。并且,如果有可能找到这些文档,是否有可能创建一个查询来获取所有不存在但限于具有嵌套子集合的文档的查询?(因为所有不存在的文档的集合都是无限的)

Kat*_*ato 5

Admin SDK提供具有以下说明的listDocuments方法:

返回的文档参考可能包括对“缺少文档”的引用,即不存在文档但包含文档子集合的文档位置。尝试读取此类文档引用(例如,通过.get()或.onSnapshot())将返回其.exists属性为false的DocumentSnapshot。

将其与列出子集合示例结合起来,您可以执行以下操作:

// Admin SDK only
let collectionRef = firestore.collection('col');

return collectionRef.listDocuments().then(documentRefs => {
   return firestore.getAll(documentRefs);
}).then(documentSnapshots => {
   documentSnapshots.forEach(doc => {
      if( !doc.exists ) {
        console.log(`Found missing document: ${documentSnapshot.id}, getting subcollections`);
        doc.getCollections().then(collections => {
          collections.forEach(collection => {
            console.log('Found subcollection with id:', collection.id);
          });
        });
      }
   });
});
Run Code Online (Sandbox Code Playgroud)

请注意,Firebase CLI使用不同的方法。通过REST API,它可以查询给定路径下的所有文档,而无需先知道其特定位置。您可以在此处的递归删除代码中查看其工作方式