如何使用解析 PFQuery 链接约束

How to chain constraint with parse 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

好的,根据你最后的评论,我认为你将不得不创建一个云代码函数来执行此操作。

您需要将其写入 Javascript。该网站有大量关于如何创建它的文档。

您可以创建一个名为 nearestPosts 的函数,然后使用 skiplimit 以及 location.

这样的参数

除了现在,您可以自己构建逻辑,而不是依赖 PFQuery 为您做所有事情。

所以你可以做类似...

  1. 获取该位置 50 公里范围内的所有帖子。
  2. createdAt 的顺序对帖子进行排序。
  3. skip 之后开始的前 limit 个帖子。
  4. Return 这些帖子在一个数组中。

本质上就是做你想做的,但你必须手动做。

然后在 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 website.

上有很多关于如何使用 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 英里范围内的所有帖子。这只是如何使这一切正常工作的开始。

希望对您有所帮助。