Я пытаюсь создать приложение, в котором я могу получать / устанавливать данные в определенных учетных записях пользователей, и меня соблазнил Firebase.
Проблема, с которой я столкнулся, заключается в том, что я не знаю, как нацелить данные конкретных пользователей, когда моя структура выглядит так:
online-b-cards
- users
- InnROTBVv6FznK81k3m
- email: "hello@hello"
- main: "Hello world this is a text"
- name: "Alex"
- phone: 12912912
Я огляделся и не могу найти ничего о том, как получить доступ к отдельным данным, не говоря уже о том, что им в качестве идентификатора предоставляется случайный хэш.
Как мне получить информацию об отдельных пользователях на основе их имени? Если есть лучший способ сделать это, пожалуйста, скажите мне!
firebase
firebase-realtime-database
Ричард Бэмфорд
источник
источник
Ответы:
Раньше Firebase требовала, чтобы вы создавали собственные индексы или загружали все данные в определенном месте для поиска и извлечения элементов, соответствующих некоторому дочернему атрибуту (например, всем пользователям с
name === "Alex"
).В октябре 2014 года Firebase представила новые функции запросов с помощью этого
orderByChild()
метода, который позволяет выполнять этот тип запросов быстро и эффективно. См. Обновленный ответ ниже.При записи данных в Firebase у вас есть несколько разных вариантов, которые будут отражать разные варианты использования. На высоком уровне Firebase представляет собой хранилище данных NoSQL с древовидной структурой и предоставляет несколько простых примитивов для управления списками данных:
Напишите в Firebase уникальный известный ключ:
Добавить в списки с автоматически сгенерированным ключом, который будет автоматически сортировать по написанному времени:
Слушайте изменения в данных по их уникальному известному пути:
Отфильтруйте или упорядочите данные в списке по ключу или значению атрибута :
С добавлением
orderByChild()
вам больше не нужно создавать собственный индекс для запросов по дочерним атрибутам! Например, чтобы получить всех пользователей с именем «Alex»:Здесь инженер Firebase. При записи данных в Firebase у вас есть несколько разных вариантов, которые будут отражать различные варианты использования приложений. Поскольку Firebase - это хранилище данных NoSQL, вам нужно будет либо хранить свои объекты данных с уникальными ключами, чтобы вы могли напрямую обращаться к этому элементу, либо загружать все данные в определенном месте и перебирать каждый элемент, чтобы найти узел, который вы ищете. , См. Раздел « Запись данных и управление списками» для получения дополнительной информации.
Когда вы пишете данные в Firebase, вы можете либо
set
данные, используя уникальный, определенный путь (т.е.a/b/c
), либоpush
данные в списке, который будет генерировать уникальный идентификатор (т.е.a/b/<unique-id>
) и позволит вам сортировать и запрашивать элементы в этом списке по времени. , Уникальный идентификатор, который вы видите выше, создается путем вызоваpush
для добавления элемента в список по адресуonline-b-cards/users
.Вместо того, чтобы использовать
push
здесь, я бы рекомендовал использоватьset
и хранить данные для каждого пользователя с использованием уникального ключа, такого как адрес электронной почты пользователя. Затем вы можете получить доступ к данным пользователя напрямую, перейдяonline-b-cards/users/<email>
через Firebase JS SDK. Например:Обратите внимание: поскольку Firebase не разрешает использование определенных символов в ссылках (см. Создание ссылок ), мы удаляем
.
и заменяем его на,
в приведенном выше коде.источник
orderByChild
функцию. Учитывая, что этот ответ довольно часто появляется как релевантный / связанный ответ, люди обязательно смотрят на него и должны знать о новых функциях запроса.Вы можете получить подробности с помощью следующего кода.
источник
Я думаю, что лучший подход - определить идентификаторы пользователей на основе объекта аутентификации, предоставленного Firebase. Когда я создаю своих пользователей, я делаю:
Этот идентификатор происходит от:
Сервисы аутентификации Firebase всегда гарантируют, что уникальный идентификатор среди всех своих провайдеров будет установлен на uid. Таким образом, у вас всегда будет auth.uid, и вы сможете легко получить доступ к желаемому пользователю для его обновления, например:
источник
Это был перефразирование сообщения, которое помогло мне при попытке получить доступ к автоматически сгенерированному уникальному идентификатору. Доступ к уникальным идентификаторам Firebase в ng-repeat с использованием неявной синхронизации angularFire
Спасибо, Беннлих (источник):
Firebase ведет себя как обычный объект javascript. Возможно, приведенный ниже пример поможет вам встать на верный путь.
Изменить: не уверен на 100% в желаемом результате, но вот еще кое-что, что может вызвать момент «ага». Нажмите на ключ, к которому вы пытаетесь получить доступ, прямо на панели управления Firebase. Оттуда вы можете использовать что-то вроде:
источник
Вот как получить доступ к автоматически сгенерированным уникальным ключам в Firebase: структура данных : - OnlineBcards - UniqueKey
источник
Самый простой способ - прекратить использование
.push(){}
функция, которая будет генерировать этот случайный ключ. Но вместо этого используйте
.update(){}
функцию, в которой вы можете указать имя дочернего элемента вместо случайного ключа.источник
Извлечение данных:
В своей базе данных вы используете случайный идентификатор, который создается с помощью
push()
, поэтому, если вы хотите получить данные, выполните следующие действия:Использование Firebase в приложении для Android:
Использование Firebase в Javascript:
Здесь у вас есть моментальный снимок (расположение данных),
users
затем вы перебираете все случайные идентификаторы и извлекаете имена.Получение данных для конкретного пользователя:
Теперь, если вы хотите получить информацию только для определенного пользователя, вам нужно добавить запрос:
Использование Firebase в приложении для Android:
Использование Firebase с Javascript
Использование
orderByChild("name").equalTo("Alex")
- это все равно что сказать,where name="Alex"
что он получит данные, связанные с Алексом.Лучший способ:
Лучше всего использовать Firebase Authentication, тем самым генерируя уникальный идентификатор для каждого пользователя и используя его вместо случайного идентификатора
push()
, таким образом вам не нужно перебирать всех пользователей, поскольку у вас есть идентификатор и вы можете легко получить к нему доступ.Во-первых, пользователь должен войти в систему, затем вы можете получить уникальный идентификатор и подключить слушателя для получения других данных этого пользователя:
Использование Firebase с Android:
Использование Firebase с Javascript:
источник
Самый простой и лучший способ добавить уникальный идентификатор в базу данных ur в соответствии с аутентифицированным пользователем:
UId будет уникальным идентификатором для определенного аутентифицированного адреса электронной почты / пользователя.
источник