Angular 4 Firebase - Cloud Firestore 'Deeply Nested' 对比 'Flatten'
Angular 4 Firebase - Cloud Firestore 'Deeply Nested' vs 'Flatten'
想知道如何使用 "Cloud Firestore (beta)" 数据库构建以下内容
Collections/Entities = '菜单', '页面', '列', '章节', '项目'
菜单有很多页,
页有很多列,
列 有很多 部分 ,
部分 有很多项。
我在构建这个时是否正确......
- 页面 文档有 menuId
- 列 文档有 pageId
- 部分 文档有 columnId
- Item 文档有 sectionId
例如,我将检索所有菜单页面......
this.afs.collection('pages', ref => ref.where('menuId', '==', menuId));
所有页列都带有..
this.afs.collection('columns', ref => ref.where('pageId', '==', pageId));
或者我应该将其构建为子集合吗?
在 NoSQL 中,您的第一个问题总是 "How will I query this data from my app?"。您有一系列一对多关系(即页面到列),这导致两种主要模式。
层次结构(父子)。如果总是通过父文档查询列,请嵌套一个子集合。然后,您可以在任何时候获取对父文档pageRef.collection('columns')
的引用的集合。
非规范化(兄弟)。但是,如果您需要跨多个页面查询列怎么办?在这种情况下,您可能想要使用根或更高级别的集合,将引用或 ID 保存到它的同级页面。然后你可以像 afs.collection('columns', ref => ref.where('color', '==', 'orange'))
这样的查询,允许你查询列而不用递归数据库树来找到所有的子集合。
想知道如何使用 "Cloud Firestore (beta)" 数据库构建以下内容
Collections/Entities = '菜单', '页面', '列', '章节', '项目'
菜单有很多页, 页有很多列, 列 有很多 部分 , 部分 有很多项。 我在构建这个时是否正确......
- 页面 文档有 menuId
- 列 文档有 pageId
- 部分 文档有 columnId
- Item 文档有 sectionId
例如,我将检索所有菜单页面......
this.afs.collection('pages', ref => ref.where('menuId', '==', menuId));
所有页列都带有..
this.afs.collection('columns', ref => ref.where('pageId', '==', pageId));
或者我应该将其构建为子集合吗?
在 NoSQL 中,您的第一个问题总是 "How will I query this data from my app?"。您有一系列一对多关系(即页面到列),这导致两种主要模式。
层次结构(父子)。如果总是通过父文档查询列,请嵌套一个子集合。然后,您可以在任何时候获取对父文档
pageRef.collection('columns')
的引用的集合。非规范化(兄弟)。但是,如果您需要跨多个页面查询列怎么办?在这种情况下,您可能想要使用根或更高级别的集合,将引用或 ID 保存到它的同级页面。然后你可以像
afs.collection('columns', ref => ref.where('color', '==', 'orange'))
这样的查询,允许你查询列而不用递归数据库树来找到所有的子集合。