【问题标题】:How to "populate" in Firestore?如何在 Firestore 中“填充”?
【发布时间】:2020-06-08 07:25:53
【问题描述】:

我是 Firestore 的新手,我正在尝试将 MongoDB 项目迁移到 Firestore。我有以下问题。我的数据结构是这样的:

/products
    'A': {name: 'Product A', price: 1},
    'B': {name: 'Product B', price: 2}

/profiles
    '1': {name: 'John', purchases: [ {product: 'A', quantity: 1} ] }

我有一组产品和一组配置文件。这些配置文件有一个购买数组,每个购买都有一个对相应产品的对象引用和一个数量。使用 MongoDb,我可以做到这一点:

const profiles = await Profiles.findById('1').populate('purchases.product', 'name price');

所以我可以得到以下对象:

{
    _id: '1',
    name: 'John',
    purchases: [
        {
            {
                _id: 'A',
                name: 'Product A',
                price: 1,
            },
            quantity: 1,
        }
    ]
}

因此,通过一个查询,我可以获得所有购买,我不必遍历所有购买并通过 id 获取它们。如何使用 Firestore 实现相同的性能?此外,如果此数据模型不适用于 Firestore,请告诉我。

【问题讨论】:

标签: firebase google-cloud-firestore


【解决方案1】:

使用 Firestore,添加文档的唯一方法是使用 adding a single document at a time(循环)或使用 batch write(循环,每次批量写入最多 500 个文档)。客户端 API 没有提供其他选项。

【讨论】:

    【解决方案2】:

    您正在寻找的是某种“内部联接”,Firestore 本身并不支持这种方式。 您必须查询文档,等待 firestore 返回值,遍历结果以查询嵌入式文档,这非常繁琐且容易出错。 Firestore 是一个非常好的选择,具体取决于您的数据结构,但不幸的是,您将在查询方面遭受重创,尤其是从像 mongo 这样的丰富数据库迁移。

    旁注 我的公司因为这个问题将一些数据从firestore迁移到mongodb Atlas,我强烈推荐Mongodb Atlas和Sticth,它们提供了类似于firestore的功能,同时保持了mongo的多功能性. 如果它有所作为,它还具有(尽管在撰写本文时处于 Beta 版)GraphQl 支持。

    结论:不支持连接。但是,您可以使用聪明的 rxjs 来解决这个问题,特别是 CombineLatest。这是一个good answer 让你开始

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2018-08-08
      • 2015-04-25
      • 2020-08-19
      相关资源
      最近更新 更多