swift Firebase为孩子添加键:值对

时间:2017-10-05 19:05:56

标签: swift firebase

EDITED

我必须在我的Firebase数据库中的节点utenti中添加一对新的key:值,结构如下,但不删除已存储在db中的先前对 enter image description here

我从一组自定义对象中获取这些对,我已经存储了我必须添加的所有用户

所以对于周期:

for user in self.usersarray {

let utentiRef = root.child("groups").child(groupId!).child("utenti")
            let refToAdd = utentiRef.child(user.id!)
            refToAdd.setValue(true)
   }

它可以工作并添加数组中的所有用户,但它会覆盖已存储在firebase上的以前用户。

我注意到,当我从另一个视图控制器运行时

root.child("groups").child(groupId!).child("utenti").updateChildValues([user.id!: true])

添加单个用户时没有覆盖,所以问题出在哪里?

3 个答案:

答案 0 :(得分:1)

这就是你要做的事情:

root.child("groups/\(groupId!)/utenti/\(user.id!)").setValue("true")

答案 1 :(得分:1)

这应该是直截了当的。我认为你错过了将子节点添加到utenti节点的部分。试试这个:

let utentiRef = self.ref.child(groups).child(groupId).child("utenti")
let refToAdd = utentiRef.childByAutoId()//or whatever the key name is; .child("xyz")
refToAdd.setValue(true)

结果

groups
   the_group_id
      utenti
         -k99asd9j9jaasj: true

并且不会覆盖现有节点。如果代码再次运行,将导致

groups
   the_group_id
      utenti
         -k99asd9j9jaasj: true
         -kYU9isj99f0392: true

答案 2 :(得分:0)

我发现我正在使用整个节点groupId的设定值调用上面某行的另一个更新,因此它被删除然后仅使用新值重新填充,抱歉浪费了你的时间...... 无论如何,两个答案都与初始代码相同,没有错误,只有不同的方式来做同样的事情