获取随机的Firebase数据库条目

我在我的数据库里有这样的用户:

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; }) 

任何build议,我怎么能做到这一点?

因此,由于Firebase与基于关系数据库的工作方式完全不同,冗余看起来是可以接受的,以便快速而有效。 所以我想出了一个解决方法,对我有用。

当我创build一个用户,我把他添加到“用户”树。 另外,我把他添加到一个“numUsers”树(我select名字很糟糕,对不起)。 这看起来像这样:

 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) })