Sayangnya, tidak mungkin mengurutkan hasil geoNear karena tidak mengembalikan kursor dan pengurutan default adalah jarak dengan titik. Yang dapat Anda lakukan adalah mengurutkan hasil secara manual dalam kode Java. Perhatikan bahwa kode di bawah ini mengabaikan jarak dan hanya mengurutkan berdasarkan "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) ;
}
});
Pendekatan alternatif adalah menggunakan $geoWithin dan $centerSphere. Karena Anda membatasi hasil dengan beberapa jarak (variabel jarak), itu bisa berhasil.
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);
Anda dapat menemukan informasi lebih lanjut tentang $geoWithin dan $centerSphere di sini:
http://docs.mongodb.org/manual/reference/operator/geoWithin/
http://docs.mongodb.org/manual/reference/operator/centerSphere/