3

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

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

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

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

我不能使用查询,因为我正在对参与者使用安全规则,即尝试解析 course.participants 的用户无法访问所有参与者(请记住,这是一个人为的示例)。

4

1 回答 1

5

我建议您远离JSON 结构中的数组。这些只是实时分布式数据的痛苦,并且在安全规则和此类情况下效果不佳。

鉴于这种结构:

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

我可以很容易地加入这些。您可以使用Firebase.util 的 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());
});

请注意,此数据结构(无数组)还将通过允许您直接引用下的用户 id 来简化对参与者数据等的读取规则$courseid/participants/,因为它们现在是可以匹配$ 变量的键。

于 2015-04-20T19:18:53.123 回答