这个问题和评论有一些不同的标准,但让我从高层次解决。
第一个答案是:无法查询Firebase的一个孩子的值,然后再排序。
简单查询功能表示:
let query = ridesRef.queryOrdered(byChild: "cust_id").queryEqual(toValue: "cust id 4")
要完成该任务,请查询所需的子数据(在本例中为所有客户id 4个节点),然后按代码订购。这是一个例子
class RideClass { var key = "" var cust_id = "" var pay_time = "" init(key: String, cust_id: String, pay_time: String) { self.key = key self.cust_id = cust_id self.pay_time = pay_time }}var rideArray = [RideClass]()func populateRideArray() { let usersRef = self.ref.child("ride_details") let query = usersRef.queryOrdered(byChild: "cust_id").queryEqual(toValue: "cust id 4") query.observeSingleEvent(of: .value, with: { snapshot in for child in snapshot.children { let snap = child as! DataSnapshot let dict = snap.value as! [String: Any] let key = snap.key let custId = dict["cust_id"] as! String let payTime = dict["pay_time"] as! String let ride = RideClass(key: key, cust_id: custId, pay_time: payTime) self.rideArray.append(ride) } for ride in self.rideArray { //unsorted example print(ride.pay_time) } self.rideArray.sort { $0.pay_time < $1.pay_time } //sort for ride in self.rideArray { //sorted example print(ride.pay_time) } })}在此示例中,我们创建了一个RideClass,其中存储了有关游乐设施的一些信息,然后存储了可以用作tableView数据源的游乐设施数组。
然后查询所有客户ID为4的游乐设施。我们有一个循环显示未分类的取回内容,然后显示这个小宝石
self.rideArray.sort { $0.pay_time < $1.pay_time }它将按pay_time对行驶数组进行排序,从而回答了问题。
但是,假设有100,000个乘车子节点。加载所有这些数据并按代码进行排序可能对内存方面提出挑战。你是做什么?
我们利用复合价值;连同cust_id和pay_time的子节点,我们还包括id_time。这是一个可能的结构:
"ride_details" : { "ride_0" : { "cust_id" : "cust id 4", "id_time" : "cust id 4_172200", "pay_time" : "172200" }, "ride_1" : { "cust_id" : "cust id 2", "id_time" : "cust id 2_165500", "pay_time" : "165500" }, "ride_2" : { "cust_id" : "cust id 1", "id_time" : "cust id 1_182300", "pay_time" : "182300" }, "ride_3" : { "cust_id" : "cust id 3", "id_time" : "cust id 3_131800", "pay_time" : "131800" }, "ride_4" : { "cust_id" : "cust id 4", "id_time" : "cust id 4_132200", "pay_time" : "132200" } },然后按正确的顺序读取cust id 4节点中的一些代码
let ridesRef = self.ref.child("ride_details") let query = ridesRef.queryOrdered(byChild: "id_time") .queryStarting(atValue: "cust id 4_") .queryEnding(atValue: "cust id 4_\uf8ff") query.observeSingleEvent(of: .value, with: { snapshot in for child in snapshot.children { let snap = child as! DataSnapshot let dict = snap.value as! [String: Any] let key = snap.key let custId = dict["cust_id"] as! String let payTime = dict["pay_time"] as! String let ride = RideClass(key: key, cust_id: custId, pay_time: payTime) self.rideArray.append(ride) } for ride in self.rideArray { //unsorted example print(ride.pay_time) } })有两件事要注意:
必须迭代快照以维护子序列
“ uf8ff”是Unipre中很高代码级别的字符-因为它包含所有前面的字符。



