2016-01-13 2 views
1

У меня есть следующая структура данныхЗапрос данных с Firebase с 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" 
    } 
    }, 

Я хочу сделать следующий запрос: Дайте мне все цены консультантов, которые имеют Анголу в их списке.

Я попробовал следующий код для извлечения только ребенка из стран-консультантов, где Angola = true.

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

Но я продолжаю получать нулевой объект в объекте советников.

+0

Что вы ищете? –

+0

В вашей первой строке кода есть опечатка 'var advisors = (ref.orderByChild (« Ангола »). 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(), потому что когда он станет доступен, он будет использоваться в вашем шаблоне.

Смежные вопросы