【问题标题】:Swift Firestore Search for usersSwift Firestore 搜索用户
【发布时间】:2019-05-02 21:17:48
【问题描述】:

我已经实现了一个使用FirebaseDatabase 搜索用户的功能:

REF_USERS.queryOrdered(byChild: "username_lowercase").queryEnding(atValue: text+"\u{f8ff}").queryLimited(toFirst: 25).queryStarting(atValue: text).observeSingleEvent(of: .value, with:
            {
                (snapshot) in
                snapshot.children.forEach(
                    {
                        (s) in
                        let child = s as! DataSnapshot
                        if let dict = child.value as? [String: Any]
                        {
                            let user = UserInfo.createUser(dict: dict, key: child.key)
                            if user.id! != currentUserId
                            {
                                completion(user)
                            }
                        }
                })
        })

但现在我决定从Database 切换到Firestore,因为他们一直在吹嘘他们的出色查询,我认为这应该不会太难,但几天以来我一直在试图弄清楚如何搜索用户,但似乎无法完成。

这就是我目前的代码:

REF_USERS.order(by: "username_lowercased").limit(to: 25).order(by: text).getDocuments
        {
            (snapshot, error) in
            snapshot?.documents.forEach(
                {
                    (s) in
                    let child = s

                    let user = UserInfo.createUser(dict: child.data(), key: child.documentID)
                    if user.id! != currentUserId
                    {
                        completion(user)
                    }
            })
        }

但就像我说的那样,没有什么是真正有效的。

有什么建议吗?我真的很感激它 c:

-玛丽

【问题讨论】:

    标签: swift firebase search google-cloud-firestore querying


    【解决方案1】:

    首先从处理错误开始。 Firestore 中的错误非常具有描述性,它们将指导您需要做什么才能使您的查询正常工作。

    guard let snapshot = snapshot else {
        // Make your completion handler work with errors as well so you can read / display them
        // completion(nil, error)
        // For now just print the error
        print(error!)
        return
    }
    

    此外,当您想在满足条件时调用成功完成处理程序时,我建议您只需使用 for 循环并在需要时中断:

    for document in snapshot.documents {
        if user.id! != currentUserId {
            completion(user)
            break
        }
    }
    

    我希望这会有所帮助。

    【讨论】:

    • 好的,谢谢,但是否可以使用 firestore 基于给定的字符串/文本进行查询?
    • 是的,您可以按文档中的字符串字段进行排序。因此,如果您的文档中有一个名为 username_lowercased 的字段,您应该可以通过它订购。
    • 所以我说.order(by: "username_lowercased").order(by: text) 是正确的做法? text 是用户输入的文本
    • 你也有text 字段吗?
    • 但是你的文档中有这样的字段吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2019-07-15
    • 1970-01-01
    • 2021-06-05
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多