Google Firestore - 构建深层嵌套的有序数据

时间:2017-10-18 02:18:05

标签: firebase google-cloud-firestore

我正试图弄清楚如何使用Cloud Firestore为我的运动应用程序构建数据。数据模型如下:

  • 该应用程序有多套练习
  • 每组练习都有一个有序的练习列表
  • 每个练习都有一个有序的练习部分列表
  • 每个练习部分都有一个有序的指令列表
  • 每条指令都有几个属性(例如text,imageUrl等)

我的第一个想法是简单地将数据存储在带有数字键的后续子集合中。但是,我需要能够查询一组练习中的所有数据(包括所有练习,部分和说明)。由于子集合不包含在文档查询的结果中,因此将所有数据存储为后续子集合将要求我进行许多查询以检索单个练习集合的所有数据。

我还可以将上述每个作为单独的顶级集合存储,并保留对每个父类型的引用(例如,指令将具有setId,exerciseId和partId)。然后,我可以对每个练习,部件和说明进行查询,对setId进行过滤。但是,这仍然需要多个查询,并且还需要在每个级别进行映射以在客户端上重建数据。

最后,因为我预计不需要查询练习级别,所以我可以将练习文档中的所有部分和说明存储在嵌套的对象/数组中。这对我来说有点味道,当我试图通过Web控制台以这种方式添加几个级别的嵌套数据时,firestore引发了错误。

非常感谢任何指导。

2 个答案:

答案 0 :(得分:0)

由于所有数据都是有序的,因此您可以创建自己的基于整数的运动ID并对其进行查询。该ID将由前导“ 1”,集合号,练习号,零件号和指令号组成。 示例:

exerciseID: 102030101
    "text": "First, do x."
    "imageURL": "Set2Exercise3Part1Instruction1.jpg"
exerciseID: 102030102
    "text": "Second, do y."
    "imageURL": "Set2Exercise3Part1Instruction2.jpg"
exerciseID: 102030103
    "text": "Third, do z."
    "imageURL": "Set2Exercise3Part1Instruction3.jpg"

然后要查询第2组,练习3,第1部分的所有说明,图片等,您将包括以下行:

exerciseAppInfo.where("exerciseID", ">=", "102030101").where("exerciseID", "<=", "102030103")

答案 1 :(得分:0)

结构如下。基本上,每个练习都是一个文档,然后将子集合放在其下。对于下面显示的情况,我对“产品”做了非常相似的事情。

关于ordering, queryingindexing数据。那应该很容易。

enter image description here