sql >> Database >  >> NoSQL >> MongoDB

Hoe afstand te krijgen - MongoDB Template Near-functie

U kunt het doen met geoNear-aggregatie . In spring-data-mongodb GeoNearOperation vertegenwoordigt deze aggregatie.

Verleng of creëer erven Place klasse met veld waar u afstandsinformatie wilt hebben (voorbeeld met overerving):

public class PlaceWithDistance extends Place {
    private double distance;

    public double getDistance() {
        return distance;
    }

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

In plaats van Criteria met Query gebruik aggregatie. Tweede argument van geoNear is de naam van het veld waar de afstand moet worden ingesteld:

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

Gewoon om het makkelijker te maken - bijbehorende importen:

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. Mongoid - opvragen door document waarnaar wordt verwezen

  2. node.js mongodb - collection.find().toArray(callback) - callback wordt niet aangeroepen

  3. Als redis al deel uitmaakt van de stapel, waarom wordt Memcached dan nog steeds naast Redis gebruikt?

  4. Uitgeschakelde bewerking mislukt voor MongoMapper-model, kan sleutel niet verwijderen/verwijderen van model