Firebase 查询孙子/多级查询
Firebase querying grandchildren / multilevel querying
从我读过的所有内容来看,查询多级值似乎是不可能的。
我的数据结构如下所示:
{
"dinosaurs": {
"bruhathkayosaurus": {
"meta":{
"addedBy":"John",
"addedDate":"02021987"
},
"appeared": -70000000,
"height": 25
},
"lambeosaurus": {
"meta":{
"addedBy":"Peter",
"addedDate":"12041987"
},
"appeared": -76000000,
"height": 2.1
}
}
}
在不知道恐龙的键名的情况下,是否可以查询仅检索 John 添加的项目的元节点。
在 JS 中类似于:
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta/addedBy")
.equalTo('Peter')
.on("child_added", function(snapshot) {
console.log(snapshot);
});
有一些 hacky 解决方案,但 none 是可扩展的,我应该将这些数据展平吗?
编辑:
我需要代码审查...这是一个可以接受的解决方案吗?
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta")
.on('child_added',function(snap1){
snap1.ref().orderByChild("addedBy")
.equalTo("Peter")
.on('child_added', function(snap2) {
console.log(snap2.val());
})
});
编辑 2016 年 1 月:自此回答以来,Firebase 具有深度查询,因此您可以查询比 1 级更深的层次。
查询的深度只能是 1 级。有许多解决方案,但可以扁平化数据,linking/referencing 是一种选择。
在上面的示例中,您可以创建另一个节点,将用户名 (parent) 链接到他们添加的恐龙 (children)。然后可以读取 John 节点并立即知道他添加了哪些恐龙。然后能够访问关于该恐龙的其他相关数据;添加日期、出现日期、身高等
users
John
bruhathkayosaurus
Styracosaurus
Lambeosaurus
Spinosaurus
Peter
Lambeosaurus
Seismosaurus
您可能想使用 uid 而不是名称,但您明白了。
此外,不清楚为什么在列出的示例中有一个元节点,因此可以将其展平:
"dinosaurs": {
"bruhathkayosaurus": {
"addedBy":"John"
"addedDate":"02021987"
"appeared": -70000000
"height": 25
},
从我读过的所有内容来看,查询多级值似乎是不可能的。 我的数据结构如下所示:
{
"dinosaurs": {
"bruhathkayosaurus": {
"meta":{
"addedBy":"John",
"addedDate":"02021987"
},
"appeared": -70000000,
"height": 25
},
"lambeosaurus": {
"meta":{
"addedBy":"Peter",
"addedDate":"12041987"
},
"appeared": -76000000,
"height": 2.1
}
}
}
在不知道恐龙的键名的情况下,是否可以查询仅检索 John 添加的项目的元节点。
在 JS 中类似于:
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta/addedBy")
.equalTo('Peter')
.on("child_added", function(snapshot) {
console.log(snapshot);
});
有一些 hacky 解决方案,但 none 是可扩展的,我应该将这些数据展平吗?
编辑:
我需要代码审查...这是一个可以接受的解决方案吗?
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta")
.on('child_added',function(snap1){
snap1.ref().orderByChild("addedBy")
.equalTo("Peter")
.on('child_added', function(snap2) {
console.log(snap2.val());
})
});
编辑 2016 年 1 月:自此回答以来,Firebase 具有深度查询,因此您可以查询比 1 级更深的层次。
查询的深度只能是 1 级。有许多解决方案,但可以扁平化数据,linking/referencing 是一种选择。
在上面的示例中,您可以创建另一个节点,将用户名 (parent) 链接到他们添加的恐龙 (children)。然后可以读取 John 节点并立即知道他添加了哪些恐龙。然后能够访问关于该恐龙的其他相关数据;添加日期、出现日期、身高等
users
John
bruhathkayosaurus
Styracosaurus
Lambeosaurus
Spinosaurus
Peter
Lambeosaurus
Seismosaurus
您可能想使用 uid 而不是名称,但您明白了。
此外,不清楚为什么在列出的示例中有一个元节点,因此可以将其展平:
"dinosaurs": {
"bruhathkayosaurus": {
"addedBy":"John"
"addedDate":"02021987"
"appeared": -70000000
"height": 25
},