ios - Swift Firebase - 获取多个 uid,然后将这些 uid 添加到孩子
问题描述
我一直在考虑这个问题,但我想我会发布一个问题来获得更多的思考能力,或者看看这是否可能。我正在获取多个 uid,然后想要获取这些 uid 并将它们附加到我的数据库中的一个子项,然后向它们添加更多数据。由于它们是 uid 的,我无法单独访问它们,这将是一个简单的 firebase“更新值”调用,所以我如何获取这个 uid 列表,然后将它们添加到一个孩子,这样它们就是他们自己独立的孩子,然后添加值给他们?我只是在考虑如何将这个 firebase 调用设置为“将这些 uid 中的每一个添加为自己的孩子”。
我如何获得 uid
func getEmployees() {
let employees = Database.database().reference().child("Businesses").child(self.otherUser?["uid"] as! String).child("registered_employees").observe(.childAdded, with: { (snapshot) in
if snapshot.exists() {
let employess = snapshot.childSnapshot(forPath: "uid")
print(employess)
} else {
print("didnt call right values")
}
})
}
我将添加到 uid child 的数据样本
let userMessageRef = Database.database().reference().child("user-messages").child(fromID).child(toID)
let messageId = childRef.key
userMessageRef.updateChildValues([messageId!:1])
上面的代码 ^^^^ 我希望 uid 位于“toID”中,然后将“messageId”添加到这些 uid 中
由于无法提取每个 uid 然后设置数据,我什至不知道如何在调用中单独执行每个 uid。
解决方案
我想我明白了,所以让我用一个例子来回答。问题中没有概述我们如何获取我们想要编写的 uid,所以让我们试试这个:
假设我们有一个用户节点来存储我们的用户以及他们是否喜欢披萨
users
uid_0 //the Firebase generated uid
name: "Richie"
likes_pizza: true
uid_1
name: "Marion"
likes_pizza: false
uid_2
name: "Fonzi"
likes_pizza: true
uid_3
name: "Howard"
likes_pizza: false
我们想要做的是让喜欢披萨的用户,制作一个新节点并将每个 uid 存储为父级,然后存储他们名字的子级。
let usersRef = self.ref.child("users")
let pizzaQueryRef = usersRef.queryOrdered(byChild: "likes_pizza").queryEqual(toValue: true)
pizzaQueryRef.observeSingleEvent(of: .value, with: { snapshot in
guard let allUsers = snapshot.children.allObjects as? [DataSnapshot] else {return}
for user in allUsers {
let key = user.key
let name = user.childSnapshot(forPath: "name").value as! String
let pizzaRef = self.ref.child("pizza_lovers")
let aPizzaLoverRefUid = pizzaRef.child(key).child("their_name")
aPizzaLoverRefUid.setValue(name)
}
})
所以这段代码查询所有喜欢披萨的用户(这使我们能够访问他们的 uid),然后(根据问题)将它们附加到数据库中的一个子节点,然后向他们添加更多数据
然后想要获取这些uid并将它们附加到我的数据库中的一个孩子,然后向它们添加更多数据
结果是
pizza_lovers
uid_0
their_name: "Richie"
uid_2
their_name: "Fonzi"
如果我误解了这个问题,请告诉我,我会更新。