MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Modèle mongo de printemps. Le tri ne fonctionne pas dans la requête géographique (NearQuery)

Malheureusement, il n'est pas possible de trier les résultats geoNear car il ne renvoie pas de curseur et le tri par défaut est la distance avec le point. Ce que vous pouvez faire, c'est trier les résultats manuellement dans le code Java. Notez que le code ci-dessous ignore la distance et trie uniquement par "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) ;
        }
    });

Une autre approche consiste à utiliser $geoWithin et $centerSphere. Puisque vous limitez les résultats avec une certaine distance (variable de distance), cela pourrait fonctionner.

    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);

Vous pouvez trouver plus d'informations sur $geoWithin et $centerSphere ici :

http://docs.mongodb.org/manual/reference/operator/geoWithin/

http://docs.mongodb.org/manual/reference/operator/centerSphere/