2015-10-29 4 views
2

Firebase orderByChild() работает хорошо, когда ребенок свойства имеют имена, так что данные, как это:Firebase orderByChild() с вложенными ключей

groups 
    <groupID> 
     groupStatus: "Active" 

это легко получить groupIDs из групп с «Active» статус этим:

var ref = "http://myFirebase.firebaseio.com/groups"; 
ref.orderByChild("groupStatus").equalTo("Active").on("child_added", function(snapshot) { 
    console.log(snapshot.key()); 
}); 

Но у меня есть firebase данные групп и членов этих групп в следующем виде:

groups 
    group123 
     member404: true 
     member503: true 
     ... 
    group124 
     member503: true 
     member221: true 
     ... 

Мне нужно сгенерировать список всех членов-членов, которые являются «друзьями» определенного члена, которые определены как находящиеся по крайней мере в одной группе с ними. Для члена 503 вы бы подумали, что это будет опция orderByChild(). Но поскольку идентификаторы memberID являются ключами, вложенными в группы, каков будет синтаксис?

Что-то вроде:

ref.orderByChild(???).equalTo("member503") 

Конечно, я мог бы получить все члены всех групп в массив локально, но, конечно, есть способ, чтобы получить firebase, чтобы сделать это для меня?

ответ

4

Вы смешиваете дочерние ключи и значения здесь. Решение:

ref.child('groups').orderByChild('member404').equalTo(true) 
+1

Да, 'membersRef.orderByChild (UID) .equalTo (истина)' работает для запроса, но теперь моя проблема заключается в том, чтобы создать индекс, чтобы сделать его выполнить. Firebase жалуется: «Подумайте о добавлении« .indexOn »:« 41ab3832-6a90-4141-bdf5-92c5cac0f99c », который является конкретным идентификатором участника. Очевидно, это нецелесообразно. И невозможно использовать переменную $ location в спецификации индекса. чтобы правильно индексировать это? –

+0

Yup. Вы сделали бы это, создав свой собственный так называемый * обратный индекс *. В вашем списке пользователей также отслеживайте группы, в которых они входят. Таким образом, вы можете сделать прямой поиск «групп для пользователя» и «пользователей для группы». В мире NoSQL прямой поиск всегда будет проверять запросы на одни и те же данные. Читайте здесь: http://stackoverflow.com/questions/16638660/firebase-структуры данных, а-URL/16651115 # 16651115 –

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