查询firebase中的多个记录

时间:2015-04-17 20:59:19

标签: firebase orbit.js

我正在为firebase orbit.js实现orbit-firebase适配器。

我正在寻找一种有效的方法来查询多个记录,以便我可以解决对象之间的关系,例如course.participants

{
  course: {
    'c1': {
      participants: ['p1', 'p2']
    }
  },
  participant: {
    'p1': {
      name: "Jim"
    },
    'p2': {
      name: "Mark"
    }
  }
}

鉴于我有'id'p1'和'p2'什么是查询它们的有效方法?

我无法使用查询,因为我正在使用与参与者的安全规则,即尝试解决课程的用户。参与者无法访问所有参与者(请记住这是一个人为的例子)

1 个答案:

答案 0 :(得分:5)

我建议您在JSON结构中使用move away from arrays。这些只是实时分布式数据的痛苦,并且在安全规则和类似情况下效果不佳。

鉴于这种结构:

course: {
  'c1': {
    participants: {
       'p1': true, 'p2': true
    }
  }
}

我可以很容易地加入这些。您可以使用Firebase.util's NormalizedCollection

获取一个与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());
});

请注意,通过允许您直接引用$courseid/participants/下的用户ID,此数据结构(没有数组)也可以更简单地强制执行参与者数据等的读取规则,因为它们现在是关键字可以匹配$ variable