在firebase中查询多条记录

在firebase中查询多条记录,firebase,orbit.js,Firebase,Orbit.js,我正在为firebase实现一个适配器 我正在寻找一种查询多个记录的有效方法,以便能够解决对象(例如课程参与者)之间的关系 { course: { 'c1': { participants: ['p1', 'p2'] } }, participant: { 'p1': { name: "Jim" }, 'p2': { name: "Mark" } } } 如果我有ID“p1”和“p2”,那么查询

我正在为firebase实现一个适配器

我正在寻找一种查询多个记录的有效方法,以便能够解决对象(例如课程参与者)之间的关系

{
  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());
});