Насколько физически изменить структуру в firebase - PullRequest
0 голосов
/ 05 мая 2018

Если я храню данные о сотрудниках в базе данных firebase, в которой есть 3 поля, и в будущем, если я захочу добавить или удалить поле, то насколько они физические в базе данных firebase? и как я могу это сделать?

Я хочу использовать Firebase для одного из моих проектов iOS (Swift 4), над которым я скоро начну работать, поэтому я хочу снять вышеупомянутую проблему.

Ответы [ 2 ]

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

Пока ответ Ланса работает - вот простая альтернатива. Предположим, вы хотите удалить поле возраста из Firebase. Учитывая структуру

employees
  employee_0
    name: "Steve"
    age: "42"
  employee_1
    name: "Hank"
    age: "37"

если вы хотите удалить узел возраста из всех узлов сотрудников, это будет сделано

let employeesRef = Database.database().reference().child("employees")
employeesRef.observe(.childAdded, with: { snapshot in
    let key = snapshot.key
    let refToRemove = employeesRef.child(key).child("age")
    refToRemove.removeValue()
})

Добавление поля (дочернего узла) еще проще, поскольку значения дочерних узлов не могут быть равны нулю, поэтому при записи данных они добавляются в узел

employeesRef.child(employee_key).child("favorite_food").setValue("pizza")

добавит узел любимой еды со значением pizza к узлу сотрудника.

Обратите внимание, что в Firebase нет «полей», только родительские и дочерние узлы, являющиеся парами ключ: значение.

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

Ответ Джея - лучший способ выполнить то, что вы просите, но это альтернатива. Если вы новичок, это может быть легче понять и начать с. По мере продвижения используйте код Джея.

Похоже, вы хотите сделать что-то вроде этого.

Ваша структура базы данных в Firebase:

root
  |
  @-012345 // eg. employeeId
       |-"firstName": "Hello"
       |-"lastName": "World"
       |-"age": "25"

Вы хотите добавить или удалить поле, есть несколько способов сделать это, но это легко. Все, что вам нужно, это отслеживать исходные значения, затем добавлять их плюс новые значения в Dictionary и исключать все, что вы не хотите отправлять в Firebase, используя метод .setValue():

// class properties
let rootRef: DatabaseReference? = Database.database().reference()
let employedID = "012345"
let firstName = "Hello" // original value you want to keep
let lastName = "World" // original value you want to keep
let age = "25" // original value you want to REMOVE
lat gender = "female" // NEW value you want ADDED

// press the button to send the write the values to Firebase
@IBAction fileprivate func updateEmployeeButton(_ sender: UIButton) {

    // add the values to a dictionary
    let dict = [String:Any]()
    dict.(firstName, forKey: "firstName")
    dict.(lastName, forKey: "lastName")
    dict.(gender, forKey: "gender")

    let employeeIdRef = rootRef?.child(employedID)
    employeeIdRef?.setValue(dict) // call Firebase's .setValue method and pass the dict as an argument
}

Ваша структура базы данных теперь будет выглядеть так:

root
  |
  @-012345
       |-"firstName": "Hello"
       |-"lastName": "World"
       |-"gender": "female"

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

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