【问题标题】:Displaying firebase information based on search query [Firebase][Swift]根据搜索查询显示 Firebase 信息 [Firebase][Swift]
【发布时间】:2019-07-18 07:31:53
【问题描述】:

我有一个 Firebase 数据库,我试图在由 UIPageViewController 控制的 5 个不同视图控制器上按年龄查询 5 个随机用户(包括他们的姓名和电子邮件)。

我创建了查询代码以按年龄显示用户。代码如下:

func findoutinfo(){
    let usersRef = Database.database().reference().child("Users")

    let query = usersRef.queryOrdered(byChild: "Age").queryEqual(toValue: "21")
    query.observeSingleEvent(of: .value, with: { snapshot in
        for child in snapshot.children {
            let childSnap = child as! DataSnapshot
            let dict = childSnap.value as! [String: Any]

            let name = dict["Name"] as! String
            let email = dict["email"] as! String

            print(childSnap.key, name, email)
        }
    })
}

但是,我还没有找到一种随机挑选 5 个用户并在各个页面上显示他们的信息的方法。确保它们都是不同的。

【问题讨论】:

    标签: swift firebase-realtime-database


    【解决方案1】:

    不幸的是。 Firebase 没有为您提供挑选随机孩子的简单解决方案。根据用例,您可能需要采用不同的方法。

    如果用户列表不大,你可以获取所有用户,将他们放在一个数组中,然后随机选择其中的 5 个。比如:

    var selectedUsers = [[String: Any]]() 
    let qtyOfUsersToSelect = 5
    var users = getUsersArrayFromFirebase() // Made up function where you should fetch the Users.
    for i in 1...5 {
        selectedUsers.append(users.remove(at: Int.random(0..<users.count)))
    }
    

    如果您希望数据库用户很大,那么我建议您使用 Firebase 函数并在后端处理此问题。

    【讨论】:

    • 首先感谢您的回复。我预计会有超过 5000 个用户,所以我认为调用所有用户是行不通的。我正在考虑在用户节点内实现一个年龄子节点,通过它添加该特定年龄的用户。然后使用函数从特定年龄节点获取 5 个值。你认为这会奏效吗?
    • 这可能是一个解决方案,但请记住,人们热衷于每年更新他们的年龄。这可能每天都在发生,因此可能会产生不希望的过载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多