我正在为 firebase orbit.js 实现一个 orbit-firebase 适配器。
我正在寻找一种查询多条记录的有效方法,以便我可以解决对象之间的关系,例如类(class)参与者
{
course: {
'c1': {
participants: ['p1', 'p2']
}
},
participant: {
'p1': {
name: "Jim"
},
'p2': {
name: "Mark"
}
}
}
鉴于我有 id 'p1' 和 'p2',查询它们的有效方法是什么?
我无法使用查询,因为我对参与者使用安全规则,即尝试解决 course.participants 的用户无法访问所有参与者(请记住,这是一个人为的示例)。
最佳答案
我建议您在 JSON 结构中使用 move away from arrays。这些只是实时分布式数据的痛苦,并且在安全规则和此类情况下不能很好地工作。
鉴于这种结构:
course: {
'c1': {
participants: {
'p1': true, 'p2': true
}
}
}
我可以很容易地加入这些。您可以使用 Firebase.util's NormalizedCollection 获得一个行为类似于 Firebase ref 的规范化 ref:
var ref = new Firebase(...);
var coll = new Firebase.util.NormalizedCollection(
ref.child('course/c1/participants'),
ref.child('participant')
).select('participant.name').ref();
coll.on('child_added', function(snap) {
console.log('participant ' + snap.key(), snap.val());
});
请注意,此数据结构(无数组)还可以通过允许您直接引用
$courseid/participants/
下的用户 ID 来更轻松地对参与者数据等执行读取规则,因为它们现在是可以匹配 $ variable 的键。关于firebase - 查询firebase中的多条记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29709227/