2016-01-13 104 views
1

我有以下數據結構查詢數據與火力地堡與OrderByChild

{ 
    "advisors" : { 
    "0ea9bab6-415e-4900-8698-ac03a1ef4518" : { 
     "description" : "", 
     "price" : 0, 
     "title" : "" 
    }, 
    "cc31c353-ca6a-440d-b188-af2016f72aef" : { 
     "description" : "", 
     "price" : 0, 
     "title" : "" 
    }, 
    "d8403e9b-fb74-4425-874f-2d125cd07a68" : { 
     "description" : "I know every corner in the arab countries.", 
     "price" : "50", 
     "title" : "Best guide in the middle east" 
    } 
    }, 
    "advisors-countries" : { 
    "0ea9bab6-415e-4900-8698-ac03a1ef4518" : { 
     "Angola" : "true" 
    }, 
    "cc31c353-ca6a-440d-b188-af2016f72aef" : { 
     "Angola" : "true" 
    } 
    }, 

我想作以下查詢:給我這有安哥拉在他們的名單的顧問的所有價格。

我嘗試了下一個代碼來檢索只有安哥拉= true的顧問國家的孩子。

var advisors = (ref.orderByChild("Angole").equalTo(true)); 
$scope.users = $firebaseArray(advisors); 
console.log("sync ", $scope.users); 

但我一直在顧問對象中得到空對象。

+0

準確的是什麼? –

+0

你的第一行代碼行有一個錯字'var advisors =(ref.orderByChild(「Angola」)。equalTo(true));'' –

回答

4

要使用AngularFire輕鬆完成您的查詢,您需要重新修改數據結構。

"advisors-countries" : { 
    "0ea9bab6-415e-4900-8698-ac03a1ef4518" : { 
     "Angola" : "true", 
     "price": 0 
    }, 
    "cc31c353-ca6a-440d-b188-af2016f72aef" : { 
     "Angola" : "true", 
     "price": 0 
    } 
} 

您應該在advisors-countries位置包含價格和任何其他相關數據。如果您擔心重複數據,那沒關係。 You can use multi-path updates to keep your data consistent

然後將查詢將工作:

var query = ref.orderByChild("Angola").equalTo(true); 

現在,你爲什麼對$scope.users看空。

當您將$scope.users登錄到控制檯時,由於最初沒有數據,因此將會是null。下載數據是一個異步操作,所以它一開始就不可用。

要調試此操作,請使用$loaded()

$scope.users = $firebaseArray(advisors); 
$scope.users.$loaded().then(function(data) { 
    console.log(data); 
    console.log(data === $scope.users); 
}); 

在第一個日誌中,你會得到任何數據存在。在第二個日誌中,您會看到data參數與$scope.users對象相同。這意味着你沒有使用$loaded(),因爲當它變得可用時,它將用於你的模板。