按用户名首字母搜索用户并返回所有用户三个的 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)
            }

我遇到的问题是:

  1. 当我检索 dataSnapshot 时,我拥有所有 child 三项,而不仅仅是用户名
  2. 不管是什么首字母,查询结果都是不同的奇怪值

有没有人有任何解决方案或想法,可以通过用户名的首字母实际搜索用户名,而不是收到随机结果(也不区分大小写)。

堆栈中有两个类似问题的答案,但已超过 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 万用户数据库中运行良好。