MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Spring mongoTemplate. Сортирането не работи в географската заявка (NearQuery)

За съжаление не е възможно сортирането на резултатите от geoNear, тъй като не връща курсор и сортирането по подразбиране е разстоянието с точка. Това, което можете да направите, е да сортирате резултатите ръчно в Java код. Имайте предвид, че кодът по-долу игнорира разстоянието и сортира само по "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) ;
        }
    });

Алтернативен подход е използването на $geoWithin и $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);

Можете да намерите повече информация за $geoWithin и $centerSphere тук:

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

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




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb - премахване на нулеви полета рекурсивно?

  2. Rails 3:как да използвате активен запис и mongoid едновременно

  3. npm install -g mongodb не инсталира mongodb глобално на OSX 10.8.4?

  4. MongoDB:Бавна заявка, дори и с индекс

  5. Запазване на numpy масив в mongodb