如何根据另一个节点中的数据对 Firebase 阵列进行排序
How can I order my Firebase array according to data in another node?
我在Firebase中有一些非规范化的实体,如下所示:
projects
-KFsomething
name: "foo"
-KFwhatever
name: "bar"
users
UID-1234
name: "Bob"
UID-5678
name: "Alice"
observations
-KFblah
project: -KFwhatever
user: UID-1234
timestamp: 1234567890
-KFrandom
project: -KFsomething
user: UID-5678
timestamp: 1234567899
等等,和其他孩子一起。还有其他具有类似关系的实体。我需要能够在网页上显示用户、项目或其他内容的列表,按他们最近的相关观察进行排序。因此,用户将被排序为Alice,然后是Bob,因为Alice具有更新的观察结果。同样,项目将被排序 foo 然后是 bar,因为较新的观察属于 foo。
如何使用非规范化数据执行此操作?确定排序顺序的参数不属于要排序的对象。是否可以对数据执行哪些操作以使其更容易,或者是否需要一些多步骤客户端查询?
在NoSQL中,你通常需要对数据进行建模,以允许你想要的方式使用它。由于您希望按用户最近的观察结果显示用户,因此应存储每个用户的最新观察结果的时间戳。
projects
-KFsomething
name: "foo"
mostRecentObservationTimestamp: 1234567899
-KFwhatever
name: "bar"
mostRecentObservationTimestamp: 1234567890
users
UID-1234
name: "Bob"
mostRecentObservationTimestamp: 1234567890
UID-5678
name: "Alice"
mostRecentObservationTimestamp: 1234567899
observations
-KFblah
project: -KFwhatever
user: UID-1234
timestamp: 1234567890
-KFrandom
project: -KFsomething
user: UID-5678
timestamp: 1234567899
您通常会在发布新观测值时写入该额外信息,并进行多位置更新:
var observation = {
project: "-KFsomething",
user: "UID-5678"
timestamp: 1234567899
};
var updates = {};
var key = ref.push().key();
updates['observations/'+key] = observation;
updates['users/'+observation.user+'/mostRecentObservationTimestamp'] = observation.timestamp;
updates['projects/'+observation.project+'/mostRecentObservationTimestamp'] = observation.timestamp;
ref.update(updates);
请参阅这篇关于客户端扇出的精彩博客文章。
相关文章:
- 将Firebase与Electron结合使用
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 无法将数据从firebase获取到我的html页面
- 如何将firebase数据传递到函数中
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 如何在iOS应用程序中从Firebase中删除超过6小时的数据
- 没有在Angular应用程序中定义firebase(在firebase迁移之后)
- Firebase-登录时获取url
- 使用正则表达式捕获“”并分割成阵列
- AngularJS卡片转盘:将卡片返回到阵列的末尾
- 从不同的对象创建阵列
- 阵列中随机图像的问题
- 在特定条件下从存储在localStorage中的阵列中删除对象
- 如何将所有同级存储在动态本地存储阵列中
- 从localStorage添加和检索阵列
- Firebase阵列未在AngularJS视图中渲染
- 如何根据另一个节点中的数据对 Firebase 阵列进行排序
- 在firebase中克隆一个直接阵列
- 可以't访问与Firebase同步的阵列
- 图像的Firebase阵列的异步加载