首页 > 解决方案 > 在flutter firestore中获取currentUser文档的每个子集合

问题描述

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

Firestore 数据结构

在此处输入图像描述

标签: firebaseflutterdartfirebase-realtime-databasegoogle-cloud-firestore

解决方案


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

使用客户端 SDK(包括 Flutter 插件)没有方法可以列出文档的子集合。请参阅文档:“使用移动/Web 客户端库无法检索集合列表”。

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

  1. 将子集合的名称保存在父文档的字段中,例如数组类型的字段。然后您需要查询父文档,读取该字段的值,迭代数组元素并查询每个子集合。
  2. 使用 Admin SDK,它提供了一种列出 Firestore 文档子集合的方法。您可以编写一个可从 Flutter 应用程序调用的可调用云函数。

下面的这篇文章通过代码示例详细介绍了这两种方法(特别是 Callable Cloud Function 的完整代码,我将其粘贴在下面)。

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 };

});

推荐阅读