有很多解决方案,加载所有用户数据往往会导致数据过多。
这是一个典型的用户节点
users
uid_0
name: "Jean Luc"
uid_1
name: "Will"
uid_2
name: "Geordi"
let usersRef = self.ref.child("users")
var userNamesArray = [String]()
usersRef.observe(.childAdded, with: { snapshot in
let userDict = snapshot.value as! [String: Any]
let name = userDict["name"] as! String
userNamesArray.append(name)
})
user_names
uid_0: "Jean Luc"
uid_1: "Will"
uid_2: "Geordi"
正如你在这个结构中看到的那样,即使有数千个名字,它也只是一个占用空间很小的文本。
另一个选项是使用.startingAt和.endingAt一次加载X个用户,并迭代返回的用户以获得每个名称。在这种情况下,我们希望所有用户以A开头,以M结尾…对不起,Worf。
let usersRef = self.ref.child("users")
var userNamesArray = [String]()
let nameQuery = usersRef.queryOrdered(byChild: "name")
.queryStarting(atValue: "A")
.queryEnding(atValue: "M\u{f8ff}")
nameQuery.observe(.value, with: { snapshot in
for child in snapshot.children {
let snap = child as! DataSnapshot
let userDict = snap.value as! [String: Any]
let name = userDict["name"] as! String
userNamesArray.append(name)
}
})
上面查询中使用的\uf8ff字符是一个非常高的代码点
在Unicode范围内。因为它位于