为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕盖茨4494581 2023-07-06 14:56:18
我正在构建 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);
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

如果将顶级文档的 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。当您向模型添加较新的子集合时,如果它们不是同一类型的“消息”,您可以选择不同的名称。


查看完整回答
反对 回复 2023-07-06
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信