如何使用解析PFQuery链接约束

时间:2015-02-16 22:22:12

标签: ios parse-platform pfquery

使用解析PFQuery来解决链接约束问题。

我想要的是什么:

我希望按出版日期订购50公里左右的所有照片。最新的第一个(orderByDescending(" createdAt&#34)

如果我没有放置位置限制,那么一切都很好,因为我的所有照片都是按照日期进行的。

当我把whereKey用于定位时,结果仍然是有序的,但由于某种原因,我无法获得所有照片,有些被跳过,当我刷新时,我从来没有得到相同的结果... < / p>

这是我的代码:

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

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

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

1 个答案:

答案 0 :(得分:2)

好的,从您上次的评论中我认为您将不得不创建一个云代码功能来执行此操作。

您需要在Javascript中编写它。该网站有大量关于如何创建它的文档。

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

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

所以你可以做点像......

  1. 获取该位置50公里范围内的所有帖子。
  2. createdAt
  3. 的顺序对帖子进行排序
  4. limit
  5. 之后开始发送skip个帖子
  6. 以数组形式返回这些帖子。
  7. 基本上它正在做你想做的事情,但你必须手动完成。

    然后在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英里内的所有帖子。而这只是如何使这一切工作的开始。

    希望这有帮助。