2016-01-13 106 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(),因为当它变得可用时,它将用于你的模板。