如何从 firestore 中的文档 ID 数组中获取所有子集合文档

我正在构建 javascript 服务,我想从“集合名称”和“文档 ID 数组”的输入中从 firestore 获取所有子集合文档详细信息。


请求有效负载调用我的服务:


{

root_collection_name: "root_collection",

"msgId": ['11','22','33','66'],

"subcollection_name": "message"

}

我需要搜索所有此msgId 的所有子集合(所有文档的通用名称)文档。


我的 firestore 结构如下所示


collection:

    document1:

        subcollection:

            document:

                "val1":"red",

                "val2":"blue",

                "val3":"green"

    document2:

        subcollection:

            document:

                "val1":"apple",

                "val2":"mango",

                "val3":"grape"

    document3:

        ..............

            ................

例子:


root_collection:

    11:

        aaa:

            message:

                "val1":"red",

                "val2":"blue",

                "val3":"green"

    22:

        bbb:

            message:

                "val1":"apple",

                "val2":"mango",

                "val3":"grape"

                

在这种情况下,我需要获取firestore 中可用的msgId "11"、"22"的数据,其他值应发送 null。您能帮忙解决这个问题吗?不确定我在这里缺少什么。


这是我为此编写的代码。


const input = {

"root_collection_name": "root_collection",

"msgId": ['11','22','33','66'],

"subcollection_name": "message"

}

    


const test =  (input) => {

    const query = firestore.collection(input.root_collection_name).where('id', 'array-contains-any', input.msgId);

      query.get().then((querySnapshot) => {

        querySnapshot.forEach((document) => {

          document.ref.collection(input.subcollection_name).get().then((querySnapshot) => {

            querySnapshot.forEach(doc => {

              console.log('doc data',doc.data());

            });

          });

        });

      }); 

    };


test(input);


慕盖茨4494581
浏览 88回答 1
1回答

慕工程0101907

如果将顶级文档的 ID 添加到子集合文档中,则可以使用 collectionGroup。因此,从您的示例中您将得到:root_collection:11:    aaa:        message:            "root_id": "11", // <<-- new!            "val1":"red",            "val2":"blue",            "val3":"green"22:    bbb:        message:            "root_id": "22", // <<-- new!            "val1":"apple",            "val2":"mango",            "val3":"grape"您可以使用以下方式查询:var msgs = firebase.firestore().collectionGroup('message')             .where('root_id', 'in', ['11','22']);注意:这将查询所有名为 的子集合message。当您向模型添加较新的子集合时,如果它们不是同一类型的“消息”,您可以选择不同的名称。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript