如何正确实现Parse查询以获取有序数据

时间:2018-04-07 16:45:25

标签: ios swift parse-platform

我有以下代码来构建两个查询中的查询。

问题是结果未按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")

2 个答案:

答案 0 :(得分:0)

试试这个:

ownerQuery.order(byAscending: "updatedAt")

答案 1 :(得分:0)

问题原来是我处理检索数据的代码。 Parse返回排序结果。

我有以下代码,其中订购受到影响。这似乎是因为getDetails()在异步中返回。

所以我在返回之前添加了数组排序。我一次检索20行,因此对每个数组进行排序不应该是昂贵的。

我也发布在GitHub上。等待确认。

public class Problem07 {
    static List<String> flatten(Collection<?> objects, Object aClass) {
        if (objects == null) {
            throw new NoSuchElementException();
        }

        if (objects.isEmpty()) {
            return Collections.emptyList();
        }

        List<String> strings = new ArrayList<>();

        /*TODO generify for other classes, not only hardcoded String*/
        objects.forEach(o -> {
            if (o instanceof ArrayList) {
                ArrayList<String> o1 = (ArrayList<String>) o;
                strings.addAll(o1);
            } else {
                strings.add(o.toString());
            }
        });

        String formattedString = strings.toString()
                .replace("[", "")  //remove the right bracket
                .replace("]", "");  //remove the left bracket

        List<String> list = new ArrayList<>(Arrays.asList(formattedString.split(",")));

        System.out.println(list);//prints: [a,  b,  c,  d,  e]

        return list;
    }
}