Как связать ограничение при разборе 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
чтобы сделать все для вас, вы можете построить логику самостоятельно.
Таким образом, вы можете сделать что-то вроде...
- Получить все сообщения в пределах 50 км от места.
- Сортировать посты в порядке
createdAt
, - Взять первый
limit
количество постов, начинающихся послеskip
, - Вернуть эти сообщения в массиве.
По сути, он делает то, что вы хотите сделать, но вы должны сделать это вручную.
Тогда в 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 миль. И это только начало того, как заставить все это работать.
Надеюсь это поможет.