Firebase Query Double Nested

Учитывая структуру данных ниже в firebase, я хочу запустить запрос для извлечения блога «efg». На данный момент я не знаю идентификатора пользователя.

{Users : "1234567": { name: 'Bob', blogs: { 'abc':{..}, 'zyx':{..} } }, "7654321": { name: 'Frank', blogs: { 'efg':{..}, 'hij':{..} } } } 

API Firebase позволяет только фильтровать детей на один уровень (или с известным путем ) с orderByChild методов orderByChild и equalTo .

Таким образом, без изменения / расширения вашей текущей структуры данных, которая просто оставляет возможность извлекать все данные и фильтровать их на стороне клиента:

 var ref = firebase.database().ref('Users'); ref.once('value', function(snapshot) { snapshot.forEach(function(userSnapshot) { var blogs = userSnapshot.val().blogs; var daBlog = blogs['efg']; }); }); 

Это, конечно, очень неэффективно и не будет масштабироваться, если у вас нетривиальное количество пользователей / блогов.

Таким образом, общим решением этого является так называемый индекс вашего дерева, который отображает ключ, который вы ищете, к пути, в котором он находится:

 {Blogs: "abc": "1234567", "zyx": "1234567", "efg": "7654321", "hij": "7654321" } 

Затем вы можете быстро получить доступ к блогу, используя:

 var ref = firebase.database().ref(); ref.child('Blogs/efg').once('value', function(snapshot) { var user = snapshot.val(); ref.child('Blogs/'+user+'/blogs').on('value, function(blogSnapshot) { var daBlog = blogSnapshot.val(); }); }); 

Вы также можете пересмотреть, если вы можете реструктурировать свои данные, чтобы лучше соответствовать ограничениям использования и Firebase. У них есть хорошая документация по структурированию ваших данных, но самая важная для людей, не знакомых с NoSQL / иерархическими базами данных, кажется, «избегает строить гнезда» .

Также см. Мой ответ на запрос Firebase, если дочерний элемент child содержит значение для хорошего примера.

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

 const db = firebase.database() const usersRef = db.ref('users') const query = usersRef.orderByChild('blogs/efg').limitToLast(1) query.once('value').then((ss) => { console.log(ss.val()) //=> { '7654321': { blogs: {...}}} }) 

Вам нужно использовать limitToLast поскольку объекты сортируются последним при использовании документов orderByChild .

  • Запрос данных от firebase
  • Google firebase проверяет, существует ли ребенок
  • Как удалить данные из базы данных после «n» дней
  • Есть ли способ использовать GeoFire с Firestore?
  • Обработка keepSynced () в фоновом режиме на Android и с помощью FCM
  • Нечувствительная к регистру сортировка с помощью Firebase orderByChild
  • Проверка наличия определенного значения в базе данных firebase
  • Как хранить и просматривать изображения на firebase?
  • ArrayList не обновляется внутри функции onChildAdded
  • Функции Firebase: невозможно прочитать свойство user_id неопределенного
  • Паганирование абажуров Firebase
  • Interesting Posts

    Инициализация агрегатов C ++ 11 для classов с нестационарными инициализаторами элементов

    В чем разница между различными типами кабелей, такими как Cat 5, Cat 5e и Cat 6?

    Подключение к собственному IP-адресу не работает

    Перемещение файла во время его использования – как он работает?

    Какое приложение можно использовать для отслеживания дискового пространства?

    Eclipse говорит: «Рабочее пространство в использовании или не может быть создано, выбрано другое». Как открыть рабочую область?

    Каков ваш предпочтительный размер и количество мониторов?

    Как определить тип файла MIME в android?

    Использование сервера minecraft с экраном

    Использование локального уведомления katzer в IBM Worklight

    Как определить, какая программа создает определенный звук в Windows 7?

    Как файлы программного обеспечения .dmg монтируются или работают в OS X?

    Удалить , равное удалению?

    Как я могу программно создавать, читать, писать excel без установки офиса?

    Почему я не могу создать массив большого размера?

    Давайте будем гением компьютера.