Firebase 在Flatter firestore中获取currentUser文档的每个子集合

Firebase 在Flatter firestore中获取currentUser文档的每个子集合,firebase,flutter,dart,firebase-realtime-database,google-cloud-firestore,Firebase,Flutter,Dart,Firebase Realtime Database,Google Cloud Firestore,我想要的是获取当前用户文档中的所有子集合。实施方法是什么?这些子集合包含包含数据的其他文档。我只想获取子集合,以便显示当前用户向其发送消息的用户(而不是文档中的聊天/数据) 从打印屏幕上看,子集合名称似乎是动态创建的,即您事先不知道它们 对于客户端SDK(包括Flatter插件),没有允许列出文档子集合的方法。请参阅:“使用移动/web客户端库无法检索集合列表” 以下是两种常见的解决方法: 将子集合的名称保存在父文档的字段中,例如Array类型的字段。然后需要查询父文档,读取此字段的值,迭代数

我想要的是获取当前用户文档中的所有子集合。实施方法是什么?这些子集合包含包含数据的其他文档。我只想获取子集合,以便显示当前用户向其发送消息的用户(而不是文档中的聊天/数据)


从打印屏幕上看,子集合名称似乎是动态创建的,即您事先不知道它们

对于客户端SDK(包括Flatter插件),没有允许列出文档子集合的方法。请参阅:“使用移动/web客户端库无法检索集合列表”

以下是两种常见的解决方法:

  • 将子集合的名称保存在父文档的字段中,例如Array类型的字段。然后需要查询父文档,读取此字段的值,迭代数组元素并查询每个子集合
  • 使用AdminSDK,它提供了列出Firestore文档的子集合的方法。您可以编写一个可以调用的云函数
  • 下面用代码示例详细介绍了这两种方法(特别是我在下面粘贴的可调用云函数的完整代码)

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    
    admin.initializeApp();
    
    exports.getSubCollections = functions.https.onCall(async (data, context) => {
    
        const docPath = data.docPath;
    
        const collections = await admin.firestore().doc(docPath).listCollections();
        const collectionIds = collections.map(col => col.id);
    
        return { collections: collectionIds };
    
    });