角度4火力基地 - 云魔恢复 'Deeply Nested' vs 'Flatten'



好奇如何使用"Cloud Firestore(beta)"数据库构建以下内容

集合/实体=">菜单"、">Pages'、">'、"节、">项目">

菜单有许多页面页面有许多有许多部分有许多项目。我在这里的结构是否正确。。。

  • 页面文档有menuId
  • 文档具有pageId
  • 章节文档具有columnId
  • 项目文档具有sectionId

例如,我会用..检索所有菜单页面。。

this.afs.collection('pages', ref => ref.where('menuId', '==', menuId));

带有..的所有页面列。。

this.afs.collection('columns', ref => ref.where('pageId', '==', pageId));

或者我应该把它构造成子集合吗?

在NoSQL中,您的第一个问题总是"我将如何从应用程序中查询这些数据?"。您有一系列一对多关系(即页面到列),这导致了两种主要模式。

  1. 层次结构(父子)。如果列总是通过父文档查询,则嵌套一个子集合。然后,只要引用了父文档pageRef.collection('columns'),就可以获取集合。

  2. 非规范化(同级)。但是,如果您需要跨多个页面查询列,该怎么办?在这种情况下,您可能希望使用根或更高级别的集合,保存对其同级页面的引用或id。然后,您可以进行类似afs.collection('columns', ref => ref.where('color', '==', 'orange'))的查询,从而可以查询列,而无需递归数据库树来查找所有子集合。

最新更新