Как получить строку в определенном ключе в Firebase
У меня есть данные о базе данных, как показано ниже:
chats
|
|
+ - - -simplelogin48simplelogin50
|
|
|
+ - - simplelogin50simplelogin48
|
|
|
+ - - -simplelogin48simplelogin50
Теперь я хочу получить данные чата, которые содержат "simplelogin 48". Это возможно?
1 ответ
Нет, Firebase не поддерживает оператор содержимого в своих запросах. Firebase обеспечивает queryStartingAtValue
а также queryEndingAtValue
операторы для выбора диапазона ключей, но оба они основаны на начале ключа (или на значении или приоритете свойства, если вы заказали эти ключи). См. Этот раздел документации Firebase для iOS, в котором объясняются запросы.
Итак:
[[[[ref queryOrderedByKey] queryStartingAtValue:@"simplelogin48"] queryEndingAtValue:@"simplelogin48"]
Вы получите:
+ - - -simplelogin48simplelogin50
+ - - -simplelogin48simplelogin50
Но не:
+ - - simplelogin50simplelogin48
Обойти это можно путем создания так называемого индексного узла, который в этом случае просто перечисляет идентификаторы чата для каждого пользователя:
chats_by_user
|
+ - - simplelogin48
| |
| + - - simplelogin48simplelogin50
| |
| + - - simplelogin48simplelogin49
| |
| + - - simplelogin50simplelogin48
|
+ - - simplelogin49
| |
| + - - simplelogin48simplelogin49
|
+ - - simplelogin50
|
+ - - simplelogin50simplelogin48
|
+ - - simplelogin48simplelogin50
С этой структурой вы можете просто получить доступ chats_by_user/simplylogin48
чтобы получить все ссылки на все чаты для этого пользователя.