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

Firebase Firestore:如何从另一个集合中获取集合

易镜
2023-03-14

我使用的是Vue.js和Firebase FiRecovery。现在我有两个集合userorder。在订单集合中,我已经存储了user集合的每个文档的id。我现在必须从中获取相应用户的详细信息。我应该怎么做?这是我迄今为止所做的

let orderRef = db.collection("orders")
orderRef.onSnapshot(snapshot => {
  snapshot.docChanges().forEach(change => {
    if (change.type == "added") {
      let doc = change.doc;
      this.orders.push({
        id: doc.id,
        orderData: doc.data().orderData,
        user_id: doc.data().user_id,
        userInfo: db.collection("users").doc(user_id),
      });
    }
  });
});

我需要在userInfo中存储用户数据。提前谢谢

共有2个答案

宁弘亮
2023-03-14

我认为您正在构建数据,就像在关系数据库中工作一样。Firestore是一个没有SQL的数据库,没有任何引用的概念,Firestore唯一了解的是键值、文档和集合,我认为其他一切都是在这些之上建模的。请参见Firestore数据模型。

在FiRecovery中,关系通常是通过存储您要“引用”的文档的id来建模的。从这个意义上说,您可能不需要将“用户”文档存储在“订单”中,但“user_id”字段就足够了。需要注意的是,这种数据布局的代价是,在获取实际用户数据之前,必须从订单中获取“user_id”。您可以在文章link 1、link 2和其他线程中阅读更多关于数据非规范化和建模关系的信息。

此外,值得注意的是,Firestore文档的大小限制为1MB,因此,随着您的实际配置,如果“用户”文档的信息量增加,它可能会达到需要重塑文档结构的程度。

总而言之,如果您不想更改数据布局,则需要遵循Ked的建议,并首先检索“用户”数据以将其内联到“userInfo”字段中。

孙岳
2023-03-14

Firestore不支持SQL数据库这样的外键,因此无法检索SQL这样的嵌套数据
在Firestore中,您需要单独获取引用的数据,或者您可以与订单数据并行地单独获取所有用户数据并将其存储在地图中,或者如果您最初不需要用户数据,则在需要时获取每个用户数据,如您检查每个订单的详细信息。

 类似资料:
  • 模型feed.ts 新闻feed.component模板 news-feed.component.ts feed.service.ts 这可以做消防商店吗?我是消防商店的新手。请帮帮我。谢谢!

  • 我知道有一种方法可以实现db。收集getIndexes(),它将列出为集合定义的所有索引。有没有办法将这些索引定义复制并创建到另一个集合? 有很多,我不想一个接一个地做。 关于重复的问题评论:我不希望复制收藏。我希望以可以应用于另一个集合的格式导出索引。

  • 我将JPA与Hibernate和QueryDSL(v.4.0.5)一起使用。我拥有以下实体: 如何找到与给定标记集匹配的所有文章?我想我应该从以下几点开始: 其中,ce应为集合表达式。很明显,我不知道如何设置这个。 有什么解决方案吗?

  • 我有一个问题,但在我看来,我看到的所有解决方案都在解决一个比我更复杂的问题。 我对MongoDB比较陌生,但我一直在将它与Apache Neach一起使用来存储抓取的文档。由于我分阶段抓取,并以不同的方式评估每个抓取的结果,以获取统计数据,因此我一直将结果存储在不同的集合中。 我所要做的就是把这些收藏放在一起成为一个大的收藏,这样我就可以翻译和分类。所有字段都是相同的,因此我不需要添加任何新字段。

  • 我所处的情况是,当用户付款时,存储在Firestore集合(CartProducts)中的购物车产品应移动到名为SuccessFullOrders的新集合。 因此,我的基本问题是如何在Flutter中将所有文档从一个集合移动到Firestore的另一个集合 我不知道如何在flutter中编写代码。谢谢你的回答 这是我的代码

  • 问题内容: 如果我有一个收藏,例如,我如何拿出第一件?我可以先叫一个,先取一个,然后扔掉。有没有更浪费的方法呢? 问题答案: Iterables.get(yourC,indexYouWant) 因为实际上,如果您使用的是收藏夹,则应该使用Google收藏夹。