按用户名首字母搜索用户并返回所有用户三个的 Firebase 数据库问题
Firebase Database Issue in searching users by username initials and returning all users three
这是我在 Firebase DB 上存储数据的方式:
USERS : {
UUID : {
username : "a"
}
UUID :{
username : "b"
}
我已经在规则中索引了用户名。
这是尝试检索数据的查询:
var dbRef = Database
.database(url:"http//servername").reference(withPath: "users")
//
dbRef.queryOrdered(byChild: "username").queryStarting(atValue: initials, childKey: "username")
.observeSingleEvent(of: .value) { datasnap in
var a = datasnap.value
var b = a as! [String : Any]
b.forEach { key, value in
var a = value as! [String : Any]
print(a["username"] as! String)
}
我遇到的问题是:
- 当我检索 dataSnapshot 时,我拥有所有 child 三项,而不仅仅是用户名
- 不管是什么首字母,查询结果都是不同的奇怪值
有没有人有任何解决方案或想法,可以通过用户名的首字母实际搜索用户名,而不是收到随机结果(也不区分大小写)。
堆栈中有两个类似问题的答案,但已超过 5-10 年,并且无效。
谢谢大家,
我需要使用 .queryStarting(afterValue: initials
,而不是 atValue
。
这个挑战就像诀窍 - 使用字符串键搜索对象以在 firestore 上搜索数据。
let startTxt: String = searchKey
let endTxt: String = searchKey + "\u{f8ff}"
FUSER_REF
.whereField(User.key_uname, isGreaterThanOrEqualTo: startTxt)
.whereField(User.key_uname, isLessThanOrEqualTo: endTxt)
.limit(to: count)
.getDocuments{ (doc, err) in ....
让我知道这是否适合您! :)
如果您在数据库中保存小写的用户名就好了。然后使用更新后的 start/end 文本搜索用户名。
let startTxt: String = text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)
let endTxt: String = (text + "\u{f8ff}").lowercased().trimmingCharacters(in: .whitespacesAndNewlines)
这在 70 万用户数据库中运行良好。
这是我在 Firebase DB 上存储数据的方式:
USERS : {
UUID : {
username : "a"
}
UUID :{
username : "b"
}
我已经在规则中索引了用户名。 这是尝试检索数据的查询:
var dbRef = Database
.database(url:"http//servername").reference(withPath: "users")
//
dbRef.queryOrdered(byChild: "username").queryStarting(atValue: initials, childKey: "username")
.observeSingleEvent(of: .value) { datasnap in
var a = datasnap.value
var b = a as! [String : Any]
b.forEach { key, value in
var a = value as! [String : Any]
print(a["username"] as! String)
}
我遇到的问题是:
- 当我检索 dataSnapshot 时,我拥有所有 child 三项,而不仅仅是用户名
- 不管是什么首字母,查询结果都是不同的奇怪值
有没有人有任何解决方案或想法,可以通过用户名的首字母实际搜索用户名,而不是收到随机结果(也不区分大小写)。
堆栈中有两个类似问题的答案,但已超过 5-10 年,并且无效。 谢谢大家,
我需要使用 .queryStarting(afterValue: initials
,而不是 atValue
。
这个挑战就像诀窍 - 使用字符串键搜索对象以在 firestore 上搜索数据。
let startTxt: String = searchKey
let endTxt: String = searchKey + "\u{f8ff}"
FUSER_REF
.whereField(User.key_uname, isGreaterThanOrEqualTo: startTxt)
.whereField(User.key_uname, isLessThanOrEqualTo: endTxt)
.limit(to: count)
.getDocuments{ (doc, err) in ....
让我知道这是否适合您! :)
如果您在数据库中保存小写的用户名就好了。然后使用更新后的 start/end 文本搜索用户名。
let startTxt: String = text.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)
let endTxt: String = (text + "\u{f8ff}").lowercased().trimmingCharacters(in: .whitespacesAndNewlines)
这在 70 万用户数据库中运行良好。