Firebase Google дает нам возможность управлять нашей бэкэнд -инфраструктурой, фактически не управляя указанной инфраструктурой.
Некоторые из предложений Services Firebase включают в себя облачные функции для выполнения кода бэкэнд, аутентификации и баз данных
В консоли Firebase есть два предложения базы данных: база данных в реальном времени и облачная база данных. Эта статья сосредоточена на базовых операциях в базе данных в реальном времени.
База данных Firebase Realtime представляет собой управляемую службу базы данных NOSQL. Как и в случае с другими услугами Firebase, нам не нужно беспокоиться об управлении основной инфраструктурой или ресурсами.
Будучи базой данных NOSQL, данные не хранятся в реляционной (табличной) форме, а вместо этого используют модель документа в формате JSON. Данные хранятся в парах ключей.
База данных в режиме реального времени, показывающая корневые узлы и узлы детей, эти же данные, представленные в JSON, будут, как показано ниже:
{ "games" : { "-M5GU2j383E8MaXXbLT3" : { "current_quesion" : 0, "latest_tweet" : "1251784979954241536", "start_tweet" : "1251784906830733315", "users" : { "AnxiousEtin" : 0, "ObasekiEtinosa" : 0, "tetrazoid" : 0 } } } }
Корневой узел ( trivyeah-twitter-client ) содержит игры для детских узлов, которые удерживаются -M5GU2J383E8MAXXBLT3 как ребенок. Этот узел имеет несколько узлов с конкретными значениями (например, current_question с 0), но также содержит пользователей узла с собственными детьми.
Взаимодействие с базой данных осуществляется посредством ссылок. Ссылка – это указатель на конкретный узел в базе данных. Эта ссылка позволит использовать доступ к данным, хранящимся в этом узле, это дети и выполнять операции на узле.
Используя Firebase-Admin
Пакет, мы получим ссылку на БД.
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var db = firebaseAdmin.database().ref()
DB теперь содержит ссылку на корень, в приведенном выше примере Trivyeah-twitter-client нашей базы данных, и мы можем выполнить любые операции на ней.
Если бы мы вместо этого хотели ссылку на какой -то другой узел в документе, мы бы перенесли путь к нужному узлу к ref ()
метод
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var gameDb = firebaseAdmin.database().ref('games')
Приведенный выше код даст нам ссылку на игровой узел. Чтобы получить более глубоко вложенный узел пройти путь, разделенный Slashes, например, ref (‘Games/-m5gu2j383e8maxxblt3/users’)
Мы также можем достичь этого, используя метод Child () в любой ссылке на базу данных. Пройдя по пути к любому детскому узлу, который мы хотим, мы можем получить ссылку на этот узел.
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var gameDb = firebaseAdmin.database().ref('games') var childNodeUsersDb = gameDb.child('games/-M5GU2j383E8MaXXbLT3/users')
Четыре основные функции постоянного хранилища – это Создать , Читать , Обновление и Удалить Анкет Давайте посмотрим на каждую из этих операций в базе данных Firebase Realtime.
Создать операции
Создайте операции, настойчивая новую запись для хранения. В базе данных в реальном времени метод SET является основной операцией записи. Есть два разных способа его использования, и здесь будут показаны.
(Over) Написание по пути
Использование метода SET будет записывать данные в указанное местоположение, если в этом месте были какие -либо данные, они будут перезаписаны.
Он принимает любое значение JavaScript в качестве первого аргумента, и это значение будет сохраняться. Из официальной документации, «Вы можете передать установить строку, номер, логический, нулевой, массив или любой объект JSON».
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var foodDb = firebaseAdmin.database().ref('breakfast') foodDb.set({ cereal: { calories: 3, price: 50, comment: "Great for when you're in a hurry" } fufu: { calories: 12, price: 10, comment: "Cheap, but long lasting. Really long" } })
Этот пример выше устанавливает все на узле завтрака на объект, в котором мы передали. Все, что могло быть там раньше, перезаписано.
Добавление данных в узел
Чтобы добавить данные в узел, который уже содержит данные, не перезаписывая данные уже в узле, мы используем метод push (). Он возвращает ссылку на недавно созданный детский узел на первоначально упомянутом узле.
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var mealsDb = firebaseAdmin.database().ref('meals') let newMeal = mealDb.push() //newMeal will hold the reference to the new record and can be set without overwriting it's siblings newMeal.key //returns the key for the new record. Something like "-M5GU2j383E8MaXXbLT3"
Затем мы можем использовать метод set () в этой новой ссылке.
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var mealsDb = firebaseAdmin.database().ref('meals') let newMeal = mealDb.push() newMeal.set({ timeOfDay: "morning", mealEaten: "fufu" stomachStatus: "bloated", caloriesGained: 30 })
Если вам не нужна ссылка на новый узел для любых других операций, вы можете цепорить push ()
и set ()
вызовы
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var mealsDb = firebaseAdmin.database().ref('meals') let newMeal = mealDb.push().set({ timeOfDay: "morning", mealEaten: "fufu" stomachStatus: "bloated", caloriesGained: 30 })
Случаи, когда вам необходимо добавить к узлу, используя свой собственный ключ, считаются действием обновления. Давайте посмотрим, на что это похоже.
Обновление операций
Операции обновления добавляют данные в ссылку, указанную без перезаписи каких -либо других свойств.
{ "meals" : { "-K5GU2p242E8MaXHbQT1" : { timeOfDay: "morning", mealEaten: "fufu" stomachStatus: "bloated", caloriesGained: 30 }, "-K5GU2r322X8YadRZQT1" : { timeOfDay: "afternoon", mealEaten: "cornflakes" stomachStatus: "slightlyFull", caloriesGained: 2 } } }
Предполагая, что у нас было вышеупомянутое в нашей базе данных, и мы намерены добавить в узел еды, не затрагивая ни одного из существующих детей, мы бы передали объект, содержащий наш желаемый ключ к Update ()
метод
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var mealsDb = firebaseAdmin.database().ref('meals') let newMeal = mealDb.update({ uniqueMealKey: { timeOfDay: "evening", mealEaten: "nightcap" stomachStatus: "light", caloriesGained: -4 } })
Читать операции
JS SDK поддерживает неблокирующие чтения и имеет несколько событий, которые подсказывают чтение. on ()
Метод принимает событие, которое мы хотим выслушать как первый аргумент и обратный вызов, где мы можем получить доступ к моменталу данных в качестве второго аргумента.
Примечание : Обратный вызов, который мы переходим к on ()
Метод запускается каждый раз, когда происходит наше мероприятие Но если вы хотите выполнить чтение и связанный обратный вызов в один раз, используйте один ()
метод вместо. Оба метода имеют идентичные подписи.
События, которые мы можем выполнить, читают:
- “ценность”
- “Child_added”
- “Child_changed”
- “Child_Removed”
- “Child_moved”
Придерживаться нашего еда Узел, мы можем получить все блюда, используя событие Value.
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var mealsDb = firebaseAdmin.database().ref('meals') mealDb.once("value", function (snapshot) { let meals = snapshot.val() } })
на ()
/ один ()
является асинхронным методом и принимает обратный вызов.
Когда вызов базы данных завершен, обратный вызов запущен и передается экземпляр DataSnapShot. Этот объект содержит состояние базы данных в настоящее время, когда событие («значение» в данном случае) было запущено. Мы можем позвонить val ()
Метод на снимке для получения объекта JavaScript (или примитивного значения), представляющего значения ссылки узла, которые было вызвано событием.
{ "-K5GU2p242E8MaXHbQT1" : { timeOfDay: "morning", mealEaten: "fufu" stomachStatus: "bloated", caloriesGained: 30 }, "-K5GU2r322X8YadRZQT1" : { timeOfDay: "afternoon", mealEaten: "cornflakes" stomachStatus: "slightlyFull", caloriesGained: 2 }, "uniqueMealKey": { timeOfDay: "evening", mealEaten: "nightcap" stomachStatus: "light", caloriesGained: -4 } }
Мы получили бы вышеуказанный объект JavaScript в нашей переменной еды, а затем могли бы выполнить то, что мы хотели на нем.
На DataSnapShot
Пример, есть и другие методы. Вы можете просмотреть их в документации здесь.
Удалить операции
Мы рассказали о удалении данных из узла, проходящего мимо, ранее в статье. Чтобы удалить узел, просто используйте set ()
Метод на его ссылке, чтобы установить его на нулевой
const firebaseAdmin = require('firebase-admin') firebaseAdmin.initializeApp(); var mealsDb = firebaseAdmin.database().ref('meals') mealDb.child('uniqueMealKey').set(null)
Используя Ребенок ()
Метод, чтобы получить ссылку на детский узел на еду, которую мы хотим удалить, мы затем называем set ()
На этой ссылке и передайте его NULL. Это удалит все данные на UniqueMealKey Анкет
Так выполняются основные операции БД в базе данных Firebase Realtime с использованием SDK Firebase JS. SDK также доступен в Java, Go и Python. Хотя SDK Go и Python выполняют блокирующие чтения.
Документы администратора базы данных Firebase – https://firebase.google.com/docs/database/admin/start
Оригинал: “https://dev.to/obasekietinosa/database-operations-on-the-firebase-realtime-database-using-the-js-sdk-1b3a”