【问题标题】:Storing data in Firebase for optimal reading and use for statistics将数据存储在 Firebase 中以优化读取和用于统计信息
【发布时间】:2021-11-05 10:57:38
【问题描述】:

我是在 Firebase 中存储数据的新手。我正在创建我的第一个应用程序,我想从一开始就正确创建数据。

我想要做的是,当客户选择代金券(用于购买餐食时)时,我还希望他们选择他们要吃的餐食类型并存储相关统计信息。膳食类型可以是素食、汤、沙拉、鱼、肉。

所以我的第一个问题是,最好将每种类型的餐食类型存储在文档下,还是使用地图或数组。

稍后,当他们选择用餐类型时,我有一个统计数据集,我想在那里存储他们在一周和一个月内吃了多少顿汤等的统计数据。

非常感谢任何提示等

【问题讨论】:

    标签: firebase google-cloud-platform google-cloud-firestore


    【解决方案1】:

    最好将每种类型的餐食类型存储在文档下还是使用地图或数组。

    如果一顿饭可以用单一类型标记,那么你可以像这样存储类型:

    Firestore-root
      |
      --- meals (collection)
           |
           --- $mealId (document)
                |
                --- type: "soup"
    

    如果一顿饭可以使用多种类型进行标记,那么您可以使用数组:

    Firestore-root
      |
      --- meals (collection)
           |
           --- $mealId (document)
                |
                --- type: ["soup", "salad"]
    

    或者地图:

    Firestore-root
      |
      --- meals (collection)
           |
           --- $mealId (document)
                |
                --- type
                     |
                     --- soup: true
                     |
                     --- salad: true
    

    使用地图时,可以轻松创建多个whereEqualTo() 函数调用。因此,您必须选择上述解决方案中的哪一种最适合您应用的用例。

    稍后当他们选择用餐类型时,我有一个统计数据集,在其中我想存储他们在一周和一个月内吃了多少顿汤等的统计数据。

    为此,我建议您使用这样的架构:

    Firestore-root
      |
      --- statistics (collection)
           |
           --- $uid (document)
                |
                --- soup: 2
                |
                --- salad: 7
    

    通过这种方式,您可以为每个用户保留一个计数器,记录您提供了多少餐食。如果您需要更复杂的模式,可以将这些餐点作为文档存储在集合中,并将每餐添加为包含时间戳的文档。这样,您就可以查询 Timestamp 范围。

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多