2016-01-10 3 views
1

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

Screenshot of the JSON

Цель моего запроса для данного имени страны, я хочу, чтобы получить все пользователи, которые их направления массива содержат эту страну. Например: для запроса «Jordan» он будет извлекать: user2 и user3.

Кто-нибудь знает, как я могу сделать такой запрос с Firbase Angular?

+0

Ответ ниже. В следующий раз, пожалуйста, не добавляйте изображение JSON к вопросу, но добавляйте JSON как (отформатированный) текст. –

ответ

4

У Firebase нет оператора запроса, который соответствует элементам в массиве. Фактически: Firebase рекомендует не использовать массивы для ситуаций, подобных тем, которые у вас есть. Вместо этого, хранить данные, как это:

advisors-countries: { 
    user1: { 
    destinations: { 
     Angola: true, 
     Australia: true 
    } 
    }, 
    user2: { 
    destinations: { 
     Angola: true, 
     Austria: true, 
     Jordan: true 
    } 
    }, 
    user3: { 
    destinations: { 
     Austria: true 
     Egypt: true, 
     Jordan: true 
    } 
    } 
} 

Теперь вы можете запросить пользователей, которые имеют назначения Иорданию:

var users = ref.child('advisors-countries').orderByChild('destinations/Jordan') 
              .equalTo(true); 

А затем связать это с вашей сферы AngularJS с:

$scope.users = $firebaseArray(users); 

Этот тип структуры данных называется индексом, и вы часто обнаружите, что вам нужно добавлять определенные индексы в свою базу данных NoSQL, чтобы соответствовать требованиям к запросу вашего приложения. См. Это article on NoSQL data modeling за хорошее введение в тему.

+0

Спасибо, я изменил его. Но теперь, если я хочу сделать более сложный запрос: для данного названия стран я хочу получить всех пользователей и их цены, в которых их адресаты содержат по крайней мере одну из стран запроса. Например: для запроса «Иордания», «Ангола» он будет извлекать: user1, user2 и user3. – user4550050

+1

Запросы Firebase не поддерживают этот тип запросов изначально. Так же, как и раньше: вам придется моделировать свои данные, чтобы разрешить запросы, которые вы хотите запустить. Прочтите статью, которую я связал, индексы широко освещаются. В этом последнем случае вы ищете # 7 и/или # 8. –

+0

Вам не нужно выполнять обратный вызов при извлечении данных? – user4550050

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