当前位置: 首页 > 知识库问答 >
问题:

Spring MongoTemplate。排序在geo查询(NearQuery)中不工作

岳彬炳
2023-03-14
Query query = new Query();
query.with(new Sort(Direction.DESC, "timeStamp"));
Criteria criteria = new Criteria();
criteria.and("type").is("MeasurementPoint");
query.addCriteria(criteria);

NearQuery queryN = NearQuery.near(p).maxDistance(new Distance(distance, Metrics.KILOMETERS)).num(range).query(query);
GeoResults<MeasurementPoint> geoPoints = mongoTemplate.geoNear(queryN, MeasurementPoint.class);

共有1个答案

艾凯捷
2023-03-14

不幸的是,不可能对geoNear结果进行排序,因为它不返回游标,默认排序是与点的距离。您可以做的是用Java代码手动对结果进行排序。请注意,代码bellow忽略了距离,只按“时间戳”排序。

List<GeoResult<Person>> results = geoPoints.getContent();
Collections.sort(results, new Comparator<GeoResult<Person>>() {
    @Override
    public int compare(GeoResult<Person> o1, GeoResult<Person> o2) {
        return o1.getContent().getTimeStamp() == 2.getContent().getTimeStamp() ? 0 : 
                (o1.getContent().getTimeStamp() > o2.getContent().getTimeStamp() ? 1 : -1) ;
        }
    });

另一种方法是使用$geowitin和$centersphere。因为你要用一些距离(距离变量)来限制结果,所以这可以起作用。

    Query query = Query.query(Criteria.where("coords").withinSphere(new Circle(p, new Distance(distance, Metrics.KILOMETERS).getNormalizedValue())));
    query.with(new Sort(Direction.DESC, "timeStamp"));
    Criteria criteria = new Criteria();
    criteria.and("type").is("MeasurementPoint");
    query.addCriteria(criteria);

    List<Person> geoPoints = mongoTemplate.find(query, MeasurementPoint.class);

您可以在此处找到有关$GeoWithin和$CenterSphere的更多信息:

 类似资料:
  • 数学成绩从高到低排序 const { field = '' } = ctx.query const fields = ctx.helper.filterFields(field) // 数学成绩从高到低排序 const ret = await Student.findAll({ attributes: fields, order: [ ['math', 'DESC

  • 我试图指定一个用注释的存储库方法和一个带有对象的Pagable: 编辑1:此存储库正在扩展分页和排序存储库。 对象使用以下方法签名指定: 但生成的输出查询没有排序选项,例如: ...在我期待的时候: 这里有人遇到过这样的问题吗?我使用的是Spring Boot 1.5。x。

  • 我有一个DynamoDB表,其中包含主键:userID、排序键:sesionID和另一列,该列名为示例ID。 我想返回一个列表,该列表返回所有包含我发送的userID和examID的记录。这是我的代码: 这就是我得到的错误:{“statusCode”:500,“body”:“{”error“:“查询条件缺少关键架构元素:sessionId”}”, ... 我想也许我应该包括一个过滤器表达式,或者不

  • 我尝试获取所有按标题升序排列的帖子(具有特定自定义类型),但SQL查询生成的是post_date之后的订单。代码: 查询: 选择wp_posts。*从wp_posts其中1=1和wp_posts.post_type='成员'和(wp_posts.post_status='发布'或wp_posts.post_status='关闭'或wp_posts.post_status='私人'或wp_posts

  • 我在Hibernate4.0.1中遇到了本地查询问题。我有查询工作在数据库控制台,但不是在应用程序。我有: 名为“case”的表有两列指向同一个表--名为“cost”的表,其列为“value”。我的查询如下所示: 有人提到,'value'不是列的专有名称。这是真的,事实上这个列不是名为'value',而是有点不同。我的严格合同禁止发布任何关于代码的信息。我必须尽可能地释义它,所以我在fly中重命名

  • 问题内容: 我对mongodb相当陌生,并且在尝试进行有序mongodb查询时。但是不推荐使用spring数据mongodb的sort方法。所以我用了: 我使用了此代码块。但是它没有对数据进行排序。那么,您可以选择使用任何有用的方法进行此练习吗? 问题答案: 您可以通过这种方式定义排序以忽略大小写: