sql >> Database >  >> NoSQL >> MongoDB

Lente mongo sjabloon. Sorteren werkt niet in geo-query (NearQuery)

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/




  1. Laravel Echo Server, Redis, Socket.IO:het lijkt erop dat ze niet werken

  2. Wat is het verschil tussen Date.now() en Date.now in mangoest?

  3. Uw gegevens beveiligen met ClusterControl

  4. Veel documenten invoegen of bijwerken in MongoDB