如何正确实现 Parse 查询以获取有序数据
How to implement Parse query properly to get ordered data
我有以下代码可以从两个查询中构建一个查询。
问题是结果未按 updatedAt 排序。
可能是什么问题?
let ownerQuery = PFQuery(className: "requests")
ownerQuery.whereKey("owner", equalTo: forUser)
ownerQuery.whereKey("stage", equalTo: "initiated")
let requestQuery = PFQuery(className: "requests")
requestQuery.whereKey("requested_by", equalTo: requestedBy)
requestQuery.whereKey("stage", equalTo: "accepted")
// fetch all request of current user as requestor or lender/seller
let query = PFQuery.orQuery(withSubqueries: [ownerQuery, requestQuery])
query.includeKey("requested_by")
query.includeKey("owner")
query.order(byDescending: "updatedAt")
试试这个:
ownerQuery.order(byAscending: "updatedAt")
问题原来是我处理检索到的数据的代码。解析返回排序后的结果。
我在下面的代码中会影响排序。似乎是因为 getDetails() 异步返回。
所以我在返回之前添加了数组排序。我一次检索 20 行,所以我猜对每个数组进行排序应该不会很昂贵。
我也在 GitHub 上发帖。等待确认。
query.findObjectsInBackground { (results, error) in
if error == nil {
for result in results! {
group.enter()
let stage = result["stage"] as! String
let requestedBy = result["requested_by"] as! PFUser
DBHelper.getDetails(result["requested_id"] as! String, callbackFunction: { (requestedItem) in
let owner = result["owner"] as! PFUser
let request = Request()
request.requestId = result.objectId
request.item = requestedItem
request.owner = owner
request.lastUpdatedDate = result.updatedAt
requestsFound.append(request)
group.leave()
})
}
group.notify(queue: DispatchQueue.global(qos: .background), execute: {
DispatchQueue.main.async {
requestsFound.sort {(request1:Request, request2:Request) -> Bool in
request1.lastUpdatedDate! < request2.lastUpdatedDate!
}
callbackFunction(requestsFound,nil)
}
})
} else {
// encountered error from Parse
DispatchQueue.main.async {
callbackFunction(requestsFound,error! as NSError) // to represent error at backend server
}
}
} //end of findObjectsInBackground
我有以下代码可以从两个查询中构建一个查询。
问题是结果未按 updatedAt 排序。
可能是什么问题?
let ownerQuery = PFQuery(className: "requests")
ownerQuery.whereKey("owner", equalTo: forUser)
ownerQuery.whereKey("stage", equalTo: "initiated")
let requestQuery = PFQuery(className: "requests")
requestQuery.whereKey("requested_by", equalTo: requestedBy)
requestQuery.whereKey("stage", equalTo: "accepted")
// fetch all request of current user as requestor or lender/seller
let query = PFQuery.orQuery(withSubqueries: [ownerQuery, requestQuery])
query.includeKey("requested_by")
query.includeKey("owner")
query.order(byDescending: "updatedAt")
试试这个:
ownerQuery.order(byAscending: "updatedAt")
问题原来是我处理检索到的数据的代码。解析返回排序后的结果。
我在下面的代码中会影响排序。似乎是因为 getDetails() 异步返回。
所以我在返回之前添加了数组排序。我一次检索 20 行,所以我猜对每个数组进行排序应该不会很昂贵。
我也在 GitHub 上发帖。等待确认。
query.findObjectsInBackground { (results, error) in
if error == nil {
for result in results! {
group.enter()
let stage = result["stage"] as! String
let requestedBy = result["requested_by"] as! PFUser
DBHelper.getDetails(result["requested_id"] as! String, callbackFunction: { (requestedItem) in
let owner = result["owner"] as! PFUser
let request = Request()
request.requestId = result.objectId
request.item = requestedItem
request.owner = owner
request.lastUpdatedDate = result.updatedAt
requestsFound.append(request)
group.leave()
})
}
group.notify(queue: DispatchQueue.global(qos: .background), execute: {
DispatchQueue.main.async {
requestsFound.sort {(request1:Request, request2:Request) -> Bool in
request1.lastUpdatedDate! < request2.lastUpdatedDate!
}
callbackFunction(requestsFound,nil)
}
})
} else {
// encountered error from Parse
DispatchQueue.main.async {
callbackFunction(requestsFound,error! as NSError) // to represent error at backend server
}
}
} //end of findObjectsInBackground