Как связать ограничение при разборе PFQuery

Возникли проблемы с цепочкой при разборе PFQuery.

Что я хочу:

Я хочу получить все фотографии около 50 км, упорядоченные по дате публикации. Последний первый. (OrderByDescending("createdAt")

Если я не установлю ограничение местоположения, все будет хорошо, так как все мои фотографии отсортированы по дате.

Когда я помещаю whereKey для местоположения, результаты все еще упорядочены, но по какой-то причине я не могу получить все фотографии, некоторые пропускаются, а когда я обновляюсь, я никогда не получаю тот же результат...

Это мой код:

    var findPosts:PFQuery = PFQuery(className: "UserPost")

        findPosts.whereKey("location", nearGeoPoint: location, withinKilometers: 50)

        findPosts.orderByDescending("createdAt")
        findPosts.limit = 10
        findPosts.skip = timeLineData.count

1 ответ

Решение

Хорошо, из вашего последнего комментария, я думаю, вам нужно создать функцию облачного кода, чтобы сделать это.

Вам нужно будет написать это в Javascript. На сайте есть множество документов о том, как его создать.

Вы можете создать функцию под названием что-то вроде nearestPosts а затем иметь такой параметр, как skip а также limit а также location,

За исключением сейчас, вместо того, чтобы полагаться на PFQuery чтобы сделать все для вас, вы можете построить логику самостоятельно.

Таким образом, вы можете сделать что-то вроде...

  1. Получить все сообщения в пределах 50 км от места.
  2. Сортировать посты в порядке createdAt,
  3. Взять первый limit количество постов, начинающихся после skip,
  4. Вернуть эти сообщения в массиве.

По сути, он делает то, что вы хотите сделать, но вы должны сделать это вручную.

Тогда в iOS вы можете сделать что-то вроде...

[PFCloud callFunctionInBackground:@"nearestPosts"
                   withParameters:@{@"limit" : @10, @"skip" : @20, @"location" : geoPoint}
                            block:^(NSArray *posts, NSError *error) {
   if (!error) {
     // posts array contains the posts you need
   }
}];

На сайте Parse есть много документации о том, как работать с Javascript.

Ваш Javascript будет примерно таким...

Parse.Cloud.define("nearestPosts", function(request, response) {
    var location = request.params["location"];

    getNearestPosts(location).then(function(posts) {
        response.success(posts);
    }, function(error) {
        response.error(error);
    });
});

function getNearestPosts(location) {
    var promise = new Parse.Promise();

    var query = new Parse.Query("UserPost");

    query.withinMiles("location", location, 50);

    query.find().then( function(results) {
        promise.resolve(results);
    }, function(error) {
        promise.reject(error);
    });

    return promise;
}

Это позволит получить все сообщения в пределах 50 миль. И это только начало того, как заставить все это работать.

Надеюсь это поможет.

Другие вопросы по тегам