2016-09-22 26 views
1

我使用的是AngularFire 2.0.2,它使用Firebase SDK 3.x. 由於這個版本沒有fire-utils,我試圖手動創建一個規範化的集合(特別是有序和有限的連接)。帶有AngularFire的Firebase,訂購和限制加入

我有這樣的結構:

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 
    }, 
    ... 
} 

我想要得到的前10組由last_edited時間戳訂購用戶。

這樣做的最佳方法是什麼?謝謝!

回答

1

我不確定這是最好的方法,但最近我不得不這樣做,這就是我所做的。 (我在這裏解開的匿名功能,因爲我發現他們有時會混淆的東西)

首先,看你的用戶:

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

然後使用AngularFire $加載方法時,它的加載檢查,並告訴它接下來要做什麼:

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數組可用於你的前端。

正如我所說的,可能有更好的方法(我會有興趣看看有沒有更好的方法),但這似乎對我有用。

+0

我在這裏看到的問題是當你有一千個組時,你正在請求所有的組。但最後這個想法是根據組數據只能得到10個結果。謝謝你的回答西蒙! – charlieme

+0

我同意你的觀點,並且我總是懷疑nosql和long-polling,但是你可能會對Firebase中的長輪詢使得搜索速度有多快感到驚訝。 – Simon