在firebase中查询多条记录
我正在为firebase实现一个适配器 我正在寻找一种查询多个记录的有效方法,以便能够解决对象(例如课程参与者)之间的关系在firebase中查询多条记录,firebase,orbit.js,Firebase,Orbit.js,我正在为firebase实现一个适配器 我正在寻找一种查询多个记录的有效方法,以便能够解决对象(例如课程参与者)之间的关系 { course: { 'c1': { participants: ['p1', 'p2'] } }, participant: { 'p1': { name: "Jim" }, 'p2': { name: "Mark" } } } 如果我有ID“p1”和“p2”,那么查询
{
course: {
'c1': {
participants: ['p1', 'p2']
}
},
participant: {
'p1': {
name: "Jim"
},
'p2': {
name: "Mark"
}
}
}
如果我有ID“p1”和“p2”,那么查询这两个ID的有效方法是什么
我不能使用查询,因为我对参与者使用安全规则,即试图解析课程的用户。参与者没有访问所有参与者的权限(请记住,这是一个人为的示例)。我建议您在JSON结构中使用。这些都是实时分布式数据的痛苦,在安全规则和这样的情况下不能很好地工作
鉴于这种结构:
course: {
'c1': {
participants: {
'p1': true, 'p2': true
}
}
}
我可以很容易地加入这些。您可以使用以下方法获得行为与Firebase ref类似的规范化ref:
请注意,此数据结构(无阵列)还允许您直接引用
$courseid/participants/
下的用户ID,从而简化了对参与者数据等强制执行读取规则的过程,因为它们现在是可以匹配a的密钥。那么,安全规则是什么?每个玩家都可以阅读课程
,但只能在参与者
下访问关于他们自己的信息?对不起,这些关联实际上是以您推荐的格式存储的(key:true)。我不知道Firebase.util.NormalizedCollection,它看起来非常有用。它是否使用与引擎盖下的查询相同的机制?我想知道如果有安全规则阻止用户访问某些参与者(这会阻止我使用查询),它是否会起作用。这与查询不同。只有主索引(第一个ref)被完整地查找(您可以使用对它的查询来减少值集)。其他的都是通过键单独访问的,所以NormalizedCollection应该使用限制性的安全规则,而查询不这样做。好的,我不确定这样做是否会带来任何速度上的好处,因为我已经通过id单独访问记录了。扩展查询api以使用安全规则在这里真的会有所帮助。这项功能在路线图上吗?我想一个相关的问题是,单独加载它们在使用WebSocket时(相对于加载一批)实际会花费大量的时间成本吗?对于单独的查找来说,时间成本并不是很大。插座帮助很大。当我们遇到数以百万计的请求时,可能会对性能产生影响(每个once()请求都需要一些setup/teardown,尽管不是很多)。没有真正的速度优势,只是一个简单得多的代码结构,因为连接的数据被视为单个Firebase引用。
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());
});