sql >> Databáze >  >> NoSQL >> MongoDB

Jarní mongo šablona. Řazení nefunguje v geografickém dotazu (NearQuery)

Bohužel není možné seřadit výsledky geoNear, protože nevrací kurzor a výchozí řazení je vzdálenost s bodem. Co můžete udělat, je seřadit výsledky ručně v kódu Java. Všimněte si, že níže uvedený kód ignoruje vzdálenost a řadí pouze podle "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) ;
        }
    });

Alternativním přístupem je použití $geoWithin a $centerSphere. Protože omezujete výsledky určitou vzdáleností (proměnná vzdálenosti), mohlo by to fungovat.

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

Více informací o $geoWithin a $centerSphere můžete najít zde:

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

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




  1. Efektivní způsob stránkování s MongoDB a ASP.NET MVC

  2. Instalace pluginu mongoose friends s MeanJS

  3. MongoDB – Přineste si vlastní SSL certifikáty

  4. Mongodb vyhledávací pole prvků s kombinovaným výsledkem