आप इसे geoNear aggregation के साथ कर सकते हैं . स्प्रिंग-डेटा-मोंगोडब में 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;