好奇如何使用"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中,您的第一个问题总是"我将如何从应用程序中查询这些数据?"。您有一系列一对多关系(即页面到列),这导致了两种主要模式。
-
层次结构(父子)。如果列总是通过父文档查询,则嵌套一个子集合。然后,只要引用了父文档
pageRef.collection('columns')
,就可以获取集合。 -
非规范化(同级)。但是,如果您需要跨多个页面查询列,该怎么办?在这种情况下,您可能希望使用根或更高级别的集合,保存对其同级页面的引用或id。然后,您可以进行类似
afs.collection('columns', ref => ref.where('color', '==', 'orange'))
的查询,从而可以查询列,而无需递归数据库树来查找所有子集合。