当前位置: 首页 > 知识库问答 >
问题:

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

方子安
2023-03-14

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

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

{
root_collection_name: "root_collection",
"msgId": ['11','22','33','66'],
"subcollection_name": "message"
}

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

我的消防仓库结构如下所示

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"
                

在这种情况下,我需要获取msgId“11”,“22”的数据,这些数据在firestore中可用,其他值应发送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个答案

谢财
2023-03-14

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

 类似资料:
  • 我现在有一个firestore,看起来像这样: 我使用的是,我试图获取“报告”集合中的所有文档。 我可以得到一个报告: 但我无法得到整个子集合 这可能吗?我是新手,所以这可能是一个愚蠢的问题。 谢谢 编辑控制台中收到的错误消息是: 我不确定权限,我没有访问权限,但如果是权限问题,我很困惑,我可以从集合中获取一个文档,但找不到获取所有文档的方法

  • 我正在使用Java开发一个Android应用程序,我使用firestore数据库,我有一个名为用户位置的集合,其结构类似于照片: 分贝 我的问题是,当一个用户改变他的位置或一个新用户进入一个已经存在的位置(其他用户有相同的位置)时,它会创建一个新文档(如在“oran, algerie”中)。当我添加新用户并更新文档时,我想使用,但问题是我无法以正常方式检索根集合的所有文档: 它返回null。我尝试

  • 使用go和FireStore创建web应用程序。我遇到了一个奇怪的问题。如果使用NewDoc方法保存数据 我可以使用 现在,当我只想查找博客集合中的所有文档时,这是很棒的。但是我遇到了无法从blogs集合中查询特定blog的问题。我通过查看文档和保存类似的帖子来解决这个问题。 但是,由于我自己创建了docID,所以从整个集合中检索所有文档时使用

  • 嗨,我从javascript和react-native开始,我花了几个小时试图解决这个问题。有人能告诉我如何从firestore收集处获得所有文件吗? 我一直在尝试这个: 日志1打印所有对象(一个接一个),但日志2没有定义,为什么?

  • 我试图设置一个聊天应用程序,在其中你可以搜索随机的用户交谈。现在,firestore中的数据库结构如下: 集合“users”-文档“userid”-集合“conversations”-文档“conversationid”-字段“partner”,“lastmessage” 其次,我有一个集合“conversations”,其中包含对话中的所有消息。 我现在尝试做的是,当你按下一个按钮时,应用程序将

  • 假设我有这种结构 其中和是集合,和是文档 有没有一种方法可以通过一个查询获得根文档中包含的所有内容<如果我这样问 我只得到字段。我想要的是B的所有文件 我基本上希望我的查询返回 是否可能或者我真的需要对每个集合进行多个查询:/? 假设我有一个代表用户配置文件的非常深的嵌套集合树,我的成本会像地狱一样上升,因为每次我加载用户配置文件时,我都有一个读取请求的乘数其中N是我的树的深度: /.