我想知道如何在 FireBase 环境中处理对象状态。
我所说的“状态”是什么意思?好吧,假设您有一个用于组织订单列表的应用程序。每个列表由一堆订单组成,因此可以将其视为分层数据结构。此外,每个列表都有一个状态,它可能是以下之一:
- 推迟
- 打开
- 关闭
- 已发送
- 已确认
- 商品已完全收到
- 部分收到商品
- 其他东西
在视觉 (HTML) 方面,列表应通过其状态来区分。每个状态都应在其自己的 div 元素中呈现给客户端,并列出下面的所有相关订单。
所以问题是,如何在 FireBase(或任何其他基于文档的数据库)中处理这个状态?
结构
我是不是...
...(选项 1)为每个订单列表使用一个 state 字段,并使用 if 或类似的方式在客户端进行过滤:
- orderlist1.state = 打开
- 订单1
- 订单2
- orderlist2.state = 打开
- 订单1
- orderlist3.state = 已关闭
- orderlist4.state = 延迟
...(选项 2)使用 FireBase 的层次结构对订单列表进行分类,如下所示:
- 打开
- 订单列表1
- 订单1
- 订单2
- 订单列表2
- 订单1
- 订单列表1
- 已关闭
- 订单列表3
- 推迟
- 订单列表4
...(选项 3)采取完全不同的方法?
那么,这里的王道是什么?
选项 2 的检索、处理和可视化输出
由于选项 1,这个问题的答案显然非常简单(如果 state == ...),我继续选项 2:如何检索选项 2 中的数据?我是否为每个状态使用 Firebase 对象,如下所示:
var closedRef = new Firebase("https://xxx.firebaseio.com/closed");
var openRef = new Firebase("https://xxx.firebaseio.com/open");
var deferredRef = new Firebase("https://xxx.firebaseio.com/deferred");
var somethingRef = new Firebase("https://xxx.firebaseio.com/something");
或者什么被认为是处理此类数据/结构的最佳方法?
最佳答案
这个问题没有普遍的答案。 “最佳方法”将取决于您的用例的详细信息,而您在此处尚未提供。具体来说,您将如何读取和操作数据。
NoSQL 中的数据架构就是努力进行写入以使读取变得容易。这完全取决于您计划如何使用数据。 (对于一本书的一个章节来说,这也足够了。)
“选项 1”的优点是您可以轻松迭代整个列表。如果您的列表以数百为单位,那就太好了。如果您想获取列表并在客户端动态操作它,这是一个很好的方法。
“选项 2”的优点是您可以轻松获取列表的子集。如果您的列表以数千为单位,并且您通常只获取 Unresolved 问题而不是已解决的问题,那就太好了。这对于像您这样的归档/新/旧列表非常有用。
还有其他选项。
使用优先级对数据进行排序
也许最通用的方法是使用 ordered data 。这允许您query a subset使用类似以下内容的记录:
new Firebase(URL).startAt('open').endAt('open').limit(10);
在大多数情况下,您只有一个条件,或者您可以毫无困难地从多个条件(例如“开放:营销”)创建唯一标识符时,这就足够了。例如记分板、像您这样的状态列表、按时间戳排序的数据。
使用索引
您还可以通过 creating an index of keys 创建数据的自定义子集并用它来获取其他的。
当您的子集没有可识别的特征时,这是最有用的。例如,如果我从列表中选择它们并存储我的最爱。
关于angularjs - Firebase + AngularFire -> 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776195/