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

收集Firestore收集和子收集文档数据

商同
2023-03-14

我的Ionic 5应用程序中有以下Firestore数据库结构。

  • 书(集合)
    • {bookID}(带有book字段的文档)
      • 赞(子集合)
        • {userID}(文档名称作为带有字段的用户ID)

        Book集合中有文档,每个文档都有一个子集合。Like collection的文档名是喜欢这本书的用户ID。

        我正在尝试进行查询以获取最新的书籍,同时尝试从Like子集合中获取文档以检查我是否喜欢它。

        async getBook(coll) {
          snap = await this.afs.collection('Book').ref
            .orderBy('createdDate', "desc")
            .limit(10).get();
        
          snap.docs.map(x => {
            const data = x.data();
            coll.push({
              key: x.id,
              data: data.data(),
              like: this.getMyReaction(x.id)
            });
          }
        
        async getMyReaction(key) {
            const res = await this.afs.doc('Book/myUserID').ref.get();
            if(res.exists) {
            return res.data();
          } else {
            return 'notFound';
          }
        }
        

        我在这里做的是用每个图书ID调用方法getMyReaction(),并将promise存储在like字段中。稍后,我用HTML中的async管道读取like值。此代码工作正常,但由于promise需要时间才能得到解决,因此要获得like值有一点延迟。是否有一种解决方案可以在获取子集合值的同时获取子集合值?

共有1个答案

卞浩漫
2023-03-14

是否有一种解决方案可以在获取子集合值的同时获取子集合值?

如果不重组您的数据,就不行。FiRecovery查询只能考虑单个集合中的文档。唯一的例外是集合组查询,它允许您在所有名称完全相同的集合中考虑文档。您现在“加入”这两个集合的做法可能与您将获得的效果一样有效。

您可以将其转换为单个查询的唯一方法是让另一个集合与来自其他两个集合的数据预合并。这实际上在nosql数据库上很常见,称为反规范化。但这完全取决于您来决定这是否适合您的用例。

 类似资料:
  • 我想获取地图的值,找到min值,并为地图的每个条目构造一个新的CodesWitMinValue实例。我希望使用Java11个流,我可以在多行中使用多个流(一个用于min值,一个用于转换)来实现这一点。是否可以使用java 11流和收集器在单行中实现?谢谢。

  • 问题内容: 我正在寻找详细描述python垃圾回收如何工作的文档。 我对在哪个步骤中完成操作很感兴趣。这三个集合中有哪些对象?在每个步骤中删除哪些对象?参考循环使用什么算法? 背景:我正在实施一些必须在短时间内完成的搜索。当垃圾收集器开始收集最旧的一代时,它比其他情况“慢很多”。它花费了比计划的更多时间。我正在寻找如何预测何时收集最老的一代以及需要多长时间。 很容易预测何时使用和收集最老的一代。也

  • 我正在寻找一种通过文档id而不是字段进行查询的方法。 可能是这样的: 在这种情况下,searchInput是一个不完整的documentId。 我在Stackoverflow上看到了一个解决方案,但它不适用于Flatter:https://stackoverflow.com/a/52252264/8539070 要记住的另一件事是,我正在尝试显示集合中与id的某些部分匹配的所有文档的列表。 谢谢你

  • 问题内容: 为什么这不起作用… Edge接口包括:public ArrayList getEdges(); 即使这样做。 Edge接口包括:public Edge getEdges(); 谢谢,切特 问题答案: 因为while 是的子类型, 不是的子类型。 使用代替。 您可以看一下本教程的4.通配符部分,尽管我建议您通读它,因为它确实很有帮助。

  • 我想从Firebase Firestore数据库中获取数据。我有一个名为user的集合,每个用户都有一些相同类型的对象(我的Java自定义对象)的集合。我想在创建活动时用这些对象填充ArrayList。 在创建()中: 调用方法以获取要列出的项:

  • 我在处理post数据时遇到问题。 例如,如果我有一个简单的小表格: 然后收集数据并尝试回显: 我得到一个错误:MethodNotAllowedHttpException在RouteCollection中。php第218行: 如果我用GET做同样的事情,效果会很好。 我试图编辑VerifyCsrfToken并添加: 仍然不起作用。