在 firebase year/month/day 嵌套中查询特定 ID
Query specific ID's in a firebase year/month/day nest
我在 firebase 中有一些数据结构如下所示。我的客户端是用 angularjs + angularfire 构建的。
'all_records' 像这样嵌套以拆分数据,而且大多数查询都是面向时间的。
'all_records'嵌套等于:all_records>年>月>日>记录。
我想将记录与发布记录的用户相关联,因此在创建记录时已将关联 ID 保存到 'my_records' 中的用户。
这个例子显然是一个非常小的数据集,但是为了允许可扩展性和可能拥有数十万条记录,什么是查询 'all_records' 以仅获取用户 'my_records' 的最佳方式.
谢谢
all_records : {
2015 : {
2 : {
3: {
-JgJJaLaL7LuuRL_IO7c : {
data: big data;
},
-JgJfaOsyfZe_mZPTApA : {
data: lots of data;
},
...
},
...
},
1 : {
28 : {
-JgJJaLaL7kddEl_ddfE : {
data: some more data;
}
},
27 : {
-JgJfadkdjEk_mZPTApA : {
data: even more;
}
},
...
},
...
},
2014 : {
12 : {
24: {
-JgJmnvkFdqc_y63lqcv : {
data: decemeber data;
},
-JgK6xbXY_E58lshaiVa : {
data: and a bit more data;
}
},
...
},
11 : {
...
},
...
}
}
user: {
name : James,
my_records : {
-JgK6xbXY_E58lshaiVa: true,
-JgJJaLaL7LuuRL_IO7c: true
}
}
您的用户 my_records
目前没有足够的信息直接映射到记录。您需要在信息中添加日期(年月日)以允许直接查找。
我会以不同的方式构建事物:
- 仅包含记录及其
push
生成的 -J
键的列表
- 用户列表,参考他们的记录
- 一个 list/tree 个日期,并引用每个日期的记录
您的应用程序应该从不 尝试加载所有记录的列表 (#1)。相反,它应该加载相关用户(来自#2)或来自(#3)的相关日期,然后加载仅从那里引用的记录。
all_records : {
-JgJJaLaL7LuuRL_IO7c : { data: big data; },
-JgJfaOsyfZe_mZPTApA : { data: lots of data; },
-JgJJaLaL7kddEl_ddfE : { data: some more data; }
-JgJfadkdjEk_mZPTApA : { data: even more; }
}
dates: {
2015 : {
2 : {
3: {
-JgJJaLaL7LuuRL_IO7c : true,
-JgJfaOsyfZe_mZPTApA : true,
...
},
...
},
1 : {
28 : {
-JgJJaLaL7kddEl_ddfE : true
},
27 : {
-JgJfadkdjEk_mZPTApA : true
},
...
},
...
}
}
user: {
name : James,
my_records : {
-JgK6xbXY_E58lshaiVa: true,
-JgJJaLaL7LuuRL_IO7c: true
}
}
您可能还想考虑将日期结构化为一个简单的列表,而不是树:
dates: {
20150203: {
-JgJJaLaL7LuuRL_IO7c : true,
-JgJfaOsyfZe_mZPTApA : true,
...
},
20150128 : {
-JgJJaLaL7kddEl_ddfE : true
},
20150127 : {
-JgJfadkdjEk_mZPTApA : true
},
}
虽然为日期构建一棵树很诱人,但我怀疑您是否会从中受益匪浅。上面的结构比较简单,可以进行更广泛的查询,比如"give me all dates in Q1 of 2015":ref.child('dates').startAt('20150101').endAt('20150331')
.
我在 firebase 中有一些数据结构如下所示。我的客户端是用 angularjs + angularfire 构建的。
'all_records' 像这样嵌套以拆分数据,而且大多数查询都是面向时间的。
'all_records'嵌套等于:all_records>年>月>日>记录。
我想将记录与发布记录的用户相关联,因此在创建记录时已将关联 ID 保存到 'my_records' 中的用户。
这个例子显然是一个非常小的数据集,但是为了允许可扩展性和可能拥有数十万条记录,什么是查询 'all_records' 以仅获取用户 'my_records' 的最佳方式.
谢谢
all_records : {
2015 : {
2 : {
3: {
-JgJJaLaL7LuuRL_IO7c : {
data: big data;
},
-JgJfaOsyfZe_mZPTApA : {
data: lots of data;
},
...
},
...
},
1 : {
28 : {
-JgJJaLaL7kddEl_ddfE : {
data: some more data;
}
},
27 : {
-JgJfadkdjEk_mZPTApA : {
data: even more;
}
},
...
},
...
},
2014 : {
12 : {
24: {
-JgJmnvkFdqc_y63lqcv : {
data: decemeber data;
},
-JgK6xbXY_E58lshaiVa : {
data: and a bit more data;
}
},
...
},
11 : {
...
},
...
}
}
user: {
name : James,
my_records : {
-JgK6xbXY_E58lshaiVa: true,
-JgJJaLaL7LuuRL_IO7c: true
}
}
您的用户 my_records
目前没有足够的信息直接映射到记录。您需要在信息中添加日期(年月日)以允许直接查找。
我会以不同的方式构建事物:
- 仅包含记录及其
push
生成的-J
键的列表 - 用户列表,参考他们的记录
- 一个 list/tree 个日期,并引用每个日期的记录
您的应用程序应该从不 尝试加载所有记录的列表 (#1)。相反,它应该加载相关用户(来自#2)或来自(#3)的相关日期,然后加载仅从那里引用的记录。
all_records : {
-JgJJaLaL7LuuRL_IO7c : { data: big data; },
-JgJfaOsyfZe_mZPTApA : { data: lots of data; },
-JgJJaLaL7kddEl_ddfE : { data: some more data; }
-JgJfadkdjEk_mZPTApA : { data: even more; }
}
dates: {
2015 : {
2 : {
3: {
-JgJJaLaL7LuuRL_IO7c : true,
-JgJfaOsyfZe_mZPTApA : true,
...
},
...
},
1 : {
28 : {
-JgJJaLaL7kddEl_ddfE : true
},
27 : {
-JgJfadkdjEk_mZPTApA : true
},
...
},
...
}
}
user: {
name : James,
my_records : {
-JgK6xbXY_E58lshaiVa: true,
-JgJJaLaL7LuuRL_IO7c: true
}
}
您可能还想考虑将日期结构化为一个简单的列表,而不是树:
dates: {
20150203: {
-JgJJaLaL7LuuRL_IO7c : true,
-JgJfaOsyfZe_mZPTApA : true,
...
},
20150128 : {
-JgJJaLaL7kddEl_ddfE : true
},
20150127 : {
-JgJfadkdjEk_mZPTApA : true
},
}
虽然为日期构建一棵树很诱人,但我怀疑您是否会从中受益匪浅。上面的结构比较简单,可以进行更广泛的查询,比如"give me all dates in Q1 of 2015":ref.child('dates').startAt('20150101').endAt('20150331')
.