Spring数据MongoDB排序空间结果

时间:2016-08-20 23:57:49

标签: mongodb spring-data spring-data-mongodb

我正在为我的项目使用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数据库。根据要求,我肯定会得到一个地理编码 - lat和long。除此之外,我还可以获得一个名称或任何这些指标。休息服务应该通过应用所有这些过滤条件返回结果,但始终按照DISTANCE从请求中提供的lat长度排序。

我能够编写一个包含所有这些条件的Query对象,并使用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。我怎么得到这个?

1 个答案:

答案 0 :(得分:1)

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

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

评论后编辑

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

这个答案有点陈旧,不确定现在有什么新东西(2016)。

它使用$geoWithin$centerSphere