改变firebase中的结构有多物理

时间:2018-05-05 06:34:18

标签: ios swift firebase

如果我将员工数据存储在具有3个字段的firebase中,并且将来如果我想添加或删除字段,那么它在firebase中的实际情况如何?我该怎么办?

我想将Firebase用于我的iOS项目之一(Swift 4),我将很快开始工作,所以我想澄清上面提到的问题。

2 个答案:

答案 0 :(得分:1)

虽然Lance的回答有效 - 这是一个简单的选择。假设您要从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中没有“字段”,只有父节点和子节点是关键:值对。

答案 1 :(得分:0)

杰伊的回答是更好的方式来实现你的要求,但这是另一种选择。如果您是初学者,这可能更容易理解并开始。当你提前使用周杰伦的代码。

好像你想做这样的事情。

您在Firebase中的数据库结构是:

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

您想要添加或删除字段有几种方法可以做到这一点,但这样很容易。您只需跟踪原始值,然后将这些值加上新值添加到Dictionary,并使用.setValue()方法排除您想要发送到Firebase的任何内容:< / p>

// 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"

请注意我提议完全覆盖该节点上的内容的方式,但Jay的方式保留了那里的内容,但仍然可以获得您想要进行的更改。