如何将用户添加到firebase编号的数组

时间:2018-06-10 20:35:27

标签: swift firebase firebase-realtime-database

我是firebase的新手,并尝试在登录时将用户添加到聊天组。我的函数目前通过使用childbyautoid将用户附加到'members',但这会添加一个firebase生成的ID密钥和名为uid的密钥。

我想要做的是生成序列中的下一个数字作为键,并将用户ID作为值。

我在Swift中的功能:

let key = self.databaseRef.child("groups").child("-LEf3_zagKHB6qQEbTL7").child("members").childByAutoId().key
let newuser = ["uid": uid]
let childUpdates = ["/members/\(key)": newuser]
self.databaseRef.child("groups").child("-LEf3_zagKHB6qQEbTL7").updateChildValues(childUpdates)

当我尝试添加第四个  该组成员,这是我在Firebase中获得的组“LEf3_zagKHB6qQEbTL7”......

{
  "description" : "The Tribe",
  "members" : {
    "0" : "5pw4MkVxKob8nXiHojTl61tQQ822",
    "1" : "FeP6H8H0PyVjMDcqwH3zbY0xAxg2",
    "2" : "ZtcfskmMydQmGIarYyKiuO6cKbh1",
    "-BdfJitm1T_fu1ssXcUY" : {
      "uid" : "dSiUpZfdRpXxE7WQL01T5lOUkfF2"
    }
  },
  "title" : "popupzendo"
}

我期待看到的是......

{
  "description" : "The Tribe",
  "members" : {
    "0" : "5pw4MkVxKob8nXiHojTl61tQQ822",
    "1" : "FeP6H8H0PyVjMDcqwH3zbY0xAxg2",
    "2" : "ZtcfskmMydQmGIarYyKiuO6cKbh1",
    "3" : "dSiUpZfdRpXxE7WQL01T5lOUkfF2"
    }
  },
  "title" : "popupzendo"
}

1 个答案:

答案 0 :(得分:1)

如果要继续增加索引,首先必须读取整个数组,确定下一个索引,在该索引处设置新子项,然后将其写回。整个事情必须在一个事务中发生,以消除其他人在同一时间添加一个孩子的机会,并且他们都得到相同的索引。这也意味着当用户间歇性地从服务器断开时,操作不起作用。

如果所有这些听起来比预期的要复杂,您可能会意识到为什么Firebase的push()操作会生成不同类型的密钥。虽然它比顺序索引复杂得多,但却绕过了之前提到的所有问题:它不需要任何交易,也没有碰撞的机会,甚至不需要用户连接到服务器

有关为什么数组索引与大量多用户场景相结合的原因,请阅读经典博客文章https://www.electron.build/configuration/publish#s3options

如果您坚持使用数组索引,我建议您查看这些帖子:

有关在Swift中处理Firebase中的列表的更多信息,请参阅: