带有 AngularFire 的 Firebase,有序和有限的连接

Firebase with AngularFire, ordered and limited join

我正在使用 AngularFire 2.0.2,它使用 Firebase SDK 3.x。 由于此版本没有 fire-utils,我正在尝试手动创建规范化集合(特别是有序和有限的连接)。

我有这样的结构:

users: {
  user_1: {
    name:...,
    groups: {
      group_1: true,
      group_2: true,
      ...
    }
  },
  ...
},

groups: {
  group_1: {
    group_name: ...,
    last_edited: servertimestamp
  },
  group_2: {
    group_name: ...,
    last_edited: servertimestamp
  }, 
  ...
}

我想获取按 last_edited 时间戳排序的用户的前 10 组。

最好的方法是什么?谢谢!

我不确定这是最好的方法,但是当我最近不得不这样做时,我就是这样做的。 (我在这里解压了匿名函数,因为我发现它们有时会混淆)

首先,查找您的用户:

user = $firebaseObject( firebase.database().ref().child('users').child(username) );

然后使用 AngularFire $loaded 方法检查它何时加载并告诉它下一步做什么:

user .$loaded().then( lookupGroups );

然后创建一个名为 lookupGroups 的函数来进行下一次查找。这将生成一个空数组,然后使用 angular.forEach

遍历所有组
function lookupGroups (){
    $scope.groups= [];
    angular.forEach(user.groups, getGroupData);
}

然后编写你的最终 getGroupData 函数,它获取 groupid,查找它并将组数据添加到你的组数组中

function getArkData(key, value){
    grouppath = firebase.database().ref().child('groups').child(value)
    groupData = $firebaseObject( grouppath  );
    $scope.groups.push( groupData );
}

然后你就有了一个 $scope.groups 数组可以用在你的前端。

正如我所说,可能有更好的方法(我很想知道是否有人有更好的方法),但这似乎对我有用。