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

Как да получите разстояние - MongoDB Template Near функция

Можете да го направите с geoNear агрегиране . В spring-data-mongodb GeoNearOperation представлява тази агрегация.

Разширете или създайте наследено Place клас с поле, където искате да имате информация за разстоянието (пример с наследяване):

public class PlaceWithDistance extends Place {
    private double distance;

    public double getDistance() {
        return distance;
    }

    public void setDistance(final double distance) {
        this.distance = distance;
    }
}

Вместо Criteria с Query използвайте агрегация. Втори аргумент на geoNear е името на полето, където трябва да се зададе разстояние:

final NearQuery nearQuery = NearQuery
    .near(new Point(searchRequest.getLat(), searchRequest.getLng()));
nearQuery.num(5);
nearQuery.spherical(true); // if using 2dsphere index, otherwise delete or set false

// "distance" argument is name of field for distance
final Aggregation a = newAggregation(geoNear(nearQuery, "distance"));

final AggregationResults<PlaceWithDistance> results = 
    mongoTemplate.aggregate(a, Place.class, PlaceWithDistance.class);

// results.forEach(System.out::println);
List<PlaceWithDistance> ls = results.getMappedResults();

Само за по-лесно - свързани импорти:

import static org.springframework.data.mongodb.core.aggregation.Aggregation.geoNear;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation;

import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.GeoNearOperation;
import org.springframework.data.mongodb.core.query.NearQuery;


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoose find and update премахва другите полета

  2. node.JS Express паспортно маршрутизиране

  3. new Date() в сборния $project

  4. Как да започнете с ClusterControl

  5. Azure CosmosDB с помощта на драйвери Mongo:Вземете брой, без да получавате всички документи въз основа на елемент в подподдокумент в C#.Net