【问题标题】:How to add a user to a firebase numbered array如何将用户添加到 Firebase 编号数组
【发布时间】:2018-06-10 20:35:27
【问题描述】:

我是 firebase 新手,并尝试在登录时将用户添加到聊天组。我的函数目前通过使用 childbyautoid 将用户附加到“成员”,但这会添加一个 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"
}

【问题讨论】:

    标签: swift firebase firebase-realtime-database


    【解决方案1】:

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

    如果所有这些听起来都比预期的要复杂,那么您可能会明白为什么 Firebase 的 push() 操作会生成不同类型的密钥。虽然它比顺序索引复杂得多,但它绕过了前面提到的所有问题:它不需要事务,没有冲突的机会,甚至不需要用户连接到服务器。

    有关数组索引为何难以与大规模多用户场景结合的更多信息,请阅读经典博文Best Practices: Arrays in Firebase

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

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

    【讨论】:

    • 谢谢弗兰克。我做了一些阅读,我很高兴现在能明白这一点。我已经解决了眼前的问题,现在将做一些研究并制定分布式数据的新策略。非常感谢您的帮助和时间,现在我知道为什么很难找到答案了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多