sql >> データベース >  >> NoSQL >> MongoDB

春の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. $text検索で部分一致を実行できますか

    2. MongoDB$ltアグリゲーションパイプラインオペレーター

    3. マングースを使用してmongodbに2日間を含める間にmongodbからデータを取得する方法

    4. MongoDBからドキュメントを取得する際の$fieldsの除外