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, чтобы сделать это для меня?
Да, 'membersRef.orderByChild (UID) .equalTo (истина)' работает для запроса, но теперь моя проблема заключается в том, чтобы создать индекс, чтобы сделать его выполнить. Firebase жалуется: «Подумайте о добавлении« .indexOn »:« 41ab3832-6a90-4141-bdf5-92c5cac0f99c », который является конкретным идентификатором участника. Очевидно, это нецелесообразно. И невозможно использовать переменную $ location в спецификации индекса. чтобы правильно индексировать это? –
Yup. Вы сделали бы это, создав свой собственный так называемый * обратный индекс *. В вашем списке пользователей также отслеживайте группы, в которых они входят. Таким образом, вы можете сделать прямой поиск «групп для пользователя» и «пользователей для группы». В мире NoSQL прямой поиск всегда будет проверять запросы на одни и те же данные. Читайте здесь: http://stackoverflow.com/questions/16638660/firebase-структуры данных, а-URL/16651115 # 16651115 –