想知道如何使用“Cloud Firestore(测试版)”数据库构建以下内容
集合/实体 = '菜单'、'页面'、'列'、'部分' , '项目'
菜单有很多页面, Page 有很多Columns, Column 有很多Sections, 部分 有许多项目。 我在构建这个地方时是否正确......
- 页面 文档有 menuId
- Column 文档有 pageId
- Section 文档有 columnId
- Item 文档有 sectionId
例如,我将检索所有菜单页面......
this.afs.collection('pages', ref => ref.where('menuId', '==', menuId));
所有页面列...
this.afs.collection('columns', ref => ref.where('pageId', '==', pageId));
或者我应该将其构造为子集合吗?
最佳答案
在 NoSQL 中,您的第一个问题始终是“我将如何从我的应用程序中查询这些数据?”。您有一系列一对多关系(即页面到列),这导致两种主要模式。
层次结构(父子关系)。如果总是通过父文档查询列,请嵌套一个子集合。然后,您可以在引用父文档
pageRef.collection('columns')
时随时获取该集合。非规范化(同级)。但是,如果您需要跨多个页面查询列怎么办?在这种情况下,您可能想要使用根或更高级别的集合,将引用或 ID 保存到它的同级页面。然后你可以像
afs.collection('columns', ref => ref.where('color', '==', 'orange'))
这样查询,允许你查询列而不用递归数据库树以查找所有子集合。
关于Angular 4 Firebase - Cloud Firestore 'Deeply Nested' 与 'Flatten',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47187161/