Spring 数据 MongoDB 排序空间结果

Spring data MongoDB sort spatial results

我正在为我的项目使用 Spring 数据 MongoDB。

这是我的Java对象

    @Document(collection="StoreData")
    public class StoreData{
         @Id
         private String id;
         private String storeName;
         private GeoJsonPoint storeLocation;
         private double geoLat;
         private double geoLng;
         private char isStoreOpenInd;
         private char doesStoreAcceptCreditInd;
   }

前端对查询此 Mongo 数据库的后端应用程序进行了休息调用。根据要求,我一定会得到地理编码 - 纬度和经度。除此之外,我还可以获得名称或任何这些指标。其余服务应该通过应用所有这些过滤条件得到 return 结果,但始终按与请求中提供的经纬度的距离排序。

我能够使用所有这些条件编写查询对象并使用 MongoTemplate 获得结果。但是结果没有排序。我如何对它们进行排序?

到目前为止,这是我的代码。

    Query query = new Query();
    TextCriteria textCriteria =  TextCriteria.forDefaultLanguage().matchingAny(storeNameFromRequest);
    query.addCriteria(textCriteria);

    Point geoPoint = new Point(lngFromRequest, latFromRequest);
    Distance geoDistance = new Distance(10, "MI");
    Circle geoCircle = new Circle(geoPoint, geoDistance);
    query.addCriteria(Criteria.where("atmGeoLocation").withinSphere(geoCircle));

    query.addCriteria(Criteria.where("isStoreOpenInd").is(isStoreOpenIndFromRequest);

没有地方可以添加 SORT 或 ORDER BY。我如何获得这个?

您可以在查询中指定排序方向:

query.with(new Sort(Sort.Direction.ASC, "field"));

评论后编辑

正如您在评论中提到的,上述答案不适用于 GeoPoint。您可以在此处找到替代解决方案:Spring mongoTemplate. Sort is not working in geo query (NearQuery)

这个答案有点过时了,不确定现在(2016)是否有新内容。

它使用 $geoWithin$centerSphere