Как получить значение объекта Firebase с подстановочным знаком во внутренней части пути? - PullRequest
0 голосов
/ 08 мая 2018

Firebase noobie, так что извините.

Приложение имеет иерархию containers и widgets.Каждый идентификатор уникален для своего типа (т.е. widgetID все уникальны).

Пути выглядят следующим образом: containers/<id>/widgets/<id>

Для доступа к одному виджету widgetID контейнера containerIDЯ использую:

NSString *ref = [NSString stringWithFormat:@"containers/%@/widget/%@", containerID, widgetID];
FIRDatabaseReference *containers = [fb child:ref]
[[fb child:ref] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) ...

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

NSString *ref = [NSString stringWithFormat:@"containers/%@/widgets", containerID];
[[fb child:ref] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) ...

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

NSString *ref = @"containers/*/widget/123";
[[fb child:ref] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) ...

Очевидно, что это не сработает.Является ли единственным решением запросить каждый контейнер и каждый виджет для каждого, а затем запустить что-то в самом глубоком блоке, если все совпадения?[Примечание: есть много containers]

1 Ответ

0 голосов
/ 08 мая 2018

Вы, вероятно, захотите сделать то же самое, что создать еще один индекс всех виджетов, чтобы вы могли запросить их все по их уникальному идентификатору. Да, это дублирование данных, и да, это обычное явление для баз данных типа NoSQL. Структура ваших данных должна соответствовать типам запросов, которые вы хотите выполнить для них.

Итак, вы можете добавить /widgets/[wid], где wid - ваш уникальный идентификатор виджета. Это местоположение может либо полностью дублировать данные в /container/[cid]/widgets/[wid], либо просто содержать там ссылку (требующую двух запросов). Или любой другой механизм, который дает вам возможность делать запросы так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...