【问题标题】:Get random firebase database entry获取随机的firebase数据库条目
【发布时间】:2016-08-17 18:33:21
【问题描述】:

我的数据库中有这样的用户:

users
--45jklj4kljfejlk34 // random uid
----id: 1 // I add this manually when creating a user (maybe it helps getting a random user)
----someData: true
--454jkljkljefnd4lk
----id: 2
----someData: true

我想获得一个随机用户,但我不知道怎么做。 我试过了。像这样:

let usersCount = DataService.sharedInstance.DB_USER_COUNT
let rand = Double(arc4random_uniform(UInt32(usersCount))) + 1
let userRef = DataService.sharedInstance.DB_REF_USERS.queryOrdered(byChild: "id").queryStarting(atValue: rand).queryLimited(toFirst: 1))

我从数据库中获取 usersCount。在那里,我每次添加用户时都会增加数字。

但这不起作用。这就是我打印出来的结果:

(/users {
    i = id;
    l = 1;
    sp = 1;
    vf = l;
})

有什么建议,我该如何实现?

【问题讨论】:

  • DataService.sharedInstance.DB_REF_USERS.queryStarting(atValue: rand).queryLimited(toFirst: 1))一样使用它
  • 嗯,打印同样奇怪的东西
  • 运行了几次,结果总是一样的(/users { l = 1; sp = 1; vf = l; })
  • 嗯,它只返回 1
  • 所以如果它返回相同的值,它总是会给你相同的值...... :)

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

因此,由于 firebase 的工作方式与基于关系的数据库完全不同,为了快速高效,冗余似乎是可以接受的。所以我想出了一个适合我的解决方法。

当我创建一个用户时,我将他添加到“用户”树中。此外,我将他添加到“numUsers”树中(我在选择名称方面很糟糕,对此感到抱歉)。看起来像这样:

users
--45jklj4kljfejlk34 // random uid
----id: 1
----someData: true
--454jkljkljefnd4lk
----id: 2
----someData: true

numUsers
--1: 45jklj4kljfejlk34
--2: 454jkljkljefnd4lk

因此,“numUsers”由作为键的 id 和作为值的 uid 组成。每次我添加一个新用户时,我都会抓取“usersCount”(之前我增加了 1)并将其用作键。

这样,我可以很容易地抓住一个随机用户:

DataService.sharedInstance.DB_REF_USERS.child("\(rand)").observeSingleEvent(of: .value, with: {(snapshot) in print(snapshot) })

【讨论】:

    猜你喜欢
    • 2019-02-27
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2017-04-07
    • 1970-01-01
    • 2015-10-21
    • 2021-09-27
    相关资源
    最近更新 更多