Rất tiếc, không thể sắp xếp kết quả geoNear vì nó không trả về con trỏ và sắp xếp mặc định là khoảng cách với điểm. Những gì bạn có thể làm là sắp xếp các kết quả theo cách thủ công trong mã Java. Lưu ý rằng đoạn mã dưới đây bỏ qua khoảng cách và chỉ sắp xếp theo "timeStamp".
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) ;
}
});
Một cách tiếp cận thay thế là sử dụng $ geoWithin và $ centerSphere. Vì bạn đang giới hạn kết quả với một số khoảng cách (biến khoảng cách), điều đó có thể hoạt động.
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);
Bạn có thể tìm thêm thông tin về $ geoWithin và $ centerSphere tại đây:
http://docs.mongodb.org/manual/reference/operator/geoWithin/
http://docs.mongodb.org/manual/reference/operator/centerSphere/