Helaas is het niet mogelijk om geoNear-resultaten te sorteren omdat het geen cursor retourneert en de standaardsortering de afstand met punt is. Wat u zou kunnen doen, is de resultaten handmatig sorteren in Java-code. Merk op dat de onderstaande code de afstand negeert en alleen sorteert op "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) ;
}
});
Een alternatieve benadering is het gebruik van $geoWithin en $centerSphere. Aangezien je de resultaten beperkt met een bepaalde afstand (variabele afstand), zou dat kunnen werken.
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);
U kunt hier meer informatie vinden over $geoWithin en $centerSphere:
http://docs.mongodb.org/manual/reference/operator/geoWithin/
http://docs.mongodb.org/manual/reference/operator/centerSphere/