Mongodb 春天蒙哥坦普尔。排序在地理查询(NearQuery)中不起作用

Mongodb 春天蒙哥坦普尔。排序在地理查询(NearQuery)中不起作用,mongodb,sorting,geo,spring-data-mongodb,Mongodb,Sorting,Geo,Spring Data Mongodb,春季,当我尝试使用带有排序的NearQuery进行查询时,mongoTemplate出现了一个问题。排序不起作用: Query query = new Query(); query.with(new Sort(Direction.DESC, "timeStamp")); Criteria criteria = new Criteria(); criteria.and("type").is("MeasurementPoint"); query.addCriteria(criteria); Nea

春季,当我尝试使用带有排序的NearQuery进行查询时,mongoTemplate出现了一个问题。排序不起作用:

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);
Query Query=new Query();
使用(新排序(Direction.DESC,“timeStamp”);
标准=新标准();
标准和(“类型”)为(“测量点”);
query.addCriteria(条件);
NearQuery queryN=NearQuery.near(p).maxDistance(新距离(距离,Metrics.km)).num(范围).query(查询);
GeoResults geoPoints=mongoTemplate.geoNear(queryN,MeasurementPoint.class);
我不知道我做错了什么,但是乔治索尔给我的是第一场比赛,而不是最后一场(排序DESC)。因此,我假设排序不能正常工作

有什么想法吗?是虫子吗


谢谢

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

List results=geoPoints.getContent();
Collections.sort(results,newcomparator(){
@凌驾
公共整数比较(Georgesult o1,Georgesult o2){
返回o1.getContent().getTimeStamp()==2.getContent().getTimeStamp()?0:
(o1.getContent().getTimeStamp()>o2.getContent().getTimeStamp()?1:-1);
}
});
另一种方法是使用$GEOIN和$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);
Query Query=Query.Query(Criteria.where(“coords”).withinSphere(新的圆(p,新的距离(距离,Metrics.km)));
使用(新排序(Direction.DESC,“timeStamp”);
标准=新标准();
标准和(“类型”)为(“测量点”);
query.addCriteria(条件);
List geoPoints=mongoTemplate.find(查询,MeasurementPoint.class);
您可以在此处找到有关$GEOIN和$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);