【问题标题】:Angular 4 Firebase - Cloud Firestore 'Deeply Nested' vs 'Flatten'Angular 4 Firebase - Cloud Firestore“深度嵌套”与“扁平化”
【发布时间】:2017-11-08 18:32:18
【问题描述】:

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

Collections/Entities = 'Menus', 'Pages', 'Columns', 'Sections' , '项目'

菜单有很多页面页面有很多Column有很多SectionSection有很多Items。 我在哪里构造这个是正确的......

  • 页面文档有 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));

或者我应该将其构建为子集合?

【问题讨论】:

  • 你使用的是实时数据库还是firestore?
  • "Cloud firestore (beta)" :)
  • 但是您指向了错误的文档。检查此文档以获取 Firestore link

标签: angular firebase firebase-realtime-database angularfire2 google-cloud-firestore


【解决方案1】:

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

  1. 层次结构(父子)。如果总是通过父文档查询列,则嵌套一个子集合。然后,您可以随时获取父文档pageRef.collection('columns') 的参考资料。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多