带有 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 数组可以用在你的前端。
正如我所说,可能有更好的方法(我很想知道是否有人有更好的方法),但这似乎对我有用。
我正在使用 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 数组可以用在你的前端。
正如我所说,可能有更好的方法(我很想知道是否有人有更好的方法),但这似乎对我有用。