【问题标题】:Get list of documents inside different collections with Firestore in Flutter在 Flutter 中使用 Firestore 获取不同集合中的文档列表
【发布时间】:2020-01-28 19:22:24
【问题描述】:

我有一个拥有不同投资组合的用户列表。每个投资组合都具有相同的属性,但也是一组投资。应该是这样的:

Map user = {
  "name": "John",
  "portfolios": [ // collection
    {
      "title": "My portfolio 1",
      "investments": [ // collection
        {"title": "My investment 1.2"},
        {"title": "My investment 1.2"}
      ]
    },
    {
      "title": "My portfolio 2",
      "investments": [ // collection
        {"title": "My investment 2.1"},
        {"title": "My investment 2.2"},
        {"title": "My investment 2.3"}
      ]
    }
  ]
};

为了获得我的作品集,我会这样做:

Future getMyPortfolios() async {
    final userId = await authService.getUserId();
    final portfolios = await Firestore.instance
        .collection('users')
        .document(userId)
        .collection('portfolios')
        .getDocuments();
    return portfolios.documents;
  }

但这只会返回带有标题的投资组合,而不是带有投资的内部集合。

我可以使用这些 ID 进行另一个呼叫,但我想知道是否有更快的方法并从该特定用户那里获取所有信息。

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    没有更快的选择。您将需要一个单独的查询来获取任何其他集合中的文档,即使它们是子集合。 Firestore 查询始终是“浅层”的。没有在子集合中获取嵌套文档的“深度”查询。

    【讨论】:

    • 我必须考虑使用免费帐户(至少现在是这样)。如果我需要获取用户、投资组合和投资,这些是 3 个单独的查询。我可以将这 2 个集合直接移动到用户内部的普通对象/数组中,并避免对每个用户进行这些额外调用
    • 使用两个额外的查询不会导致账单显着增加。您按文档读取付费,而不是按执行查询付费(除非查询产生 0 个文档 - 在这种情况下,您只需支付单次读取费用)。请查阅定价文档:cloud.google.com/firestore/pricing
    • 另外我要指出,存储可以无限增长的数组将达到每个文档 1MB 的限制。届时,您的应用将被破坏,因为您将无法再添加数据。
    • 执行的查询和读取的文档不一样?当我写东西时,无论如何我都必须做 3 次
    • 对不起,我不明白这个问题。
    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2021-08-06
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    相关资源
    最近更新 更多