Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从firestore中的文档ID数组中获取所有子集合文档_Javascript_Node.js_Firebase_Google Cloud Platform_Google Cloud Firestore - Fatal编程技术网

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

Javascript 如何从firestore中的文档ID数组中获取所有子集合文档,javascript,node.js,firebase,google-cloud-platform,google-cloud-firestore,Javascript,Node.js,Firebase,Google Cloud Platform,Google Cloud Firestore,我正在构建javascript服务,希望从firestore中通过输入“集合名称”和“文档id数组”获取所有子集合文档详细信息 调用我的服务的请求有效负载: { root_collection_name: "root_collection", "msgId": ['11','22','33','66'], "subcollection_name": "message" } 我需要为所有这些msgId的搜索所有子集合

我正在构建javascript服务,希望从firestore中通过输入“集合名称”“文档id数组”获取所有子集合文档详细信息

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

{
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”的数据,其他值应发送空值。你能帮个忙吗?我不知道我在哪里失踪了

这是我为此编写的代码

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

如果将顶级文档的ID添加到子集合文档中,则可以

因此,从您的示例中,您可以:

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"

注意:这将查询名为
message
的任何和所有子集合。在向模型中添加较新的子集合时,如果它们不是同一类型的“消息”,则可以选择不同的名称。

据我所知,您希望使用您提供的有效负载显示文档及其字段“val”。如果是这样,请更新并在代码中包含如何调用这些有效负载输入?这将有助于社区复制您的程序,而不必花费太多时间使您的代码在他们的环境中工作。@DonnaldCucharo您是对的,我需要使用上述代码中添加的输入负载获取“val”字段。如果您需要更多详细信息,请告诉我。谢谢@Greg的回复。我在子集合文档中确实有顶级文档id,但它存在于属性数组下,如下所述。root_集合:11:aaa:消息:“root_elm”:[“root_name”:“name1”,“root_id”:“11”],“val1”:“red”,“val2”:“blue”,“val3”:“green”22:bbb:message:*“root_elm”:[“root_name”:“name2”,“root_id”:“22”],**“val1”:“apple”,“val2”:“mango”,“val3”:“grape”你能建议如何在firestore查询中处理这种情况吗?我不理解“root_elm”节点。[“xx”:“yy”,“zz”:“ww”]不是有效的JSON。请澄清,对不起。它的对象数组。我已经更正并更新了下面的结构。root_collection:11:aaa:message:“root_elm”:[{“root_name”:“name1”,“root_id”:“11”}],“val1”:“红色”,“val2”:“蓝色”,“val3”:“绿色”22:bbb:message:“root_elm”:[{“root_name”:“name2”,“root_id”:“22”}],“val1”:“苹果”,“val2”:“芒果”,“val3”:“葡萄”另外,你能让我知道我们是否需要为搜索元素启用索引吗?谢谢你的帮助!!
var msgs = firebase.firestore().collectionGroup('message')
             .where('root_id', 'in', ['11','22']);