【发布时间】:2017-12-31 22:34:48
【问题描述】:
我的数据结构如下:
users:
user1:
-carModel: evo x
-username: importguy
-region: north east
user2:
-carModel: evo x
-username: evoguy
-region: north east
user3:
-carModel: mustang gt
-username: muscleguy
-region: south east
我希望用户能够搜索汽车,例如 evo,并显示拥有这些特定汽车的用户的结果。我需要为我的应用对这些结果进行分页。问题是我不知道如何正确查询这个。这是我到目前为止所拥有的。
func fetchUsersBy(car: String) {
if self.carCurrentKey == nil {
let ref = USER_REF.queryOrdered(byChild: "carModel").queryStarting(atValue: car).queryLimited(toFirst: 3)
ref.observeSingleEvent(of: .value, with: { (snapshot) in
guard let snap = snapshot.children.allObjects as? [FIRDataSnapshot] else { return }
guard let last = snapshot.children.allObjects.last as? FIRDataSnapshot else { return }
snap.forEach({ (snapshot) in
guard let userDict = snapshot.value as? Dictionary<String, AnyObject> else { return }
guard let carModel = userDict["carModel"] as? String else { return }
if carModel.contains(car) {
print(snapshot)
}
})
self.carCurrentKey = last.key
self.carCurrentValue = last.childSnapshot(forPath: "carModel").value as? String
})
} else {
// where to start next query?
let ref = USER_REF.queryOrder(byChild: "carModel").queryStarting(atValue: self.carCurrentValue)
}
}
我必须按 carModel 排序查询,以便在快照中将具有该特定汽车类型的所有用户分组在一起。由于所有汽车型号的值都相同,因此我无法确定从哪里开始或结束下一个分页查询。使用我在 else 块中的引用在与上面的块相同的位置启动查询。任何帮助或建议将不胜感激。
我考虑过进行扇出,并为汽车类型制作单独的结构。不过这会很困难。
【问题讨论】:
标签: ios swift firebase pagination