【问题标题】:Spring data MongoDB sort spatial resultsSpring data MongoDB对空间结果进行排序
【发布时间】:2016-12-27 20:02:50
【问题描述】:

我正在为我的项目使用 Spring data 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 DB 的后端应用程序进行休息调用。根据要求,我一定会得到一个地理编码 - 经纬度。除此之外,我还可以获得名称或任何这些指标。其余服务应该通过应用所有这些过滤条件来返回结果,但始终按请求中提供的 lat long 的距离排序。

我能够使用所有这些条件编写一个 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。我怎么得到这个?

【问题讨论】:

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


    【解决方案1】:

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

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

    在 cmets 之后编辑

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

    这个答案有点过时了,不确定现在是否有新的东西(2016 年)。

    它使用$geoWithin$centerSphere

    【讨论】:

    • 实际上这对 GeoJsonPoint 不起作用。我认为这是春季的一个错误,因为当您为 GeoJsonPoint 执行此操作时,它只是按结果的经度而不是距离进行排序
    猜你喜欢
    • 2017-06-03
    • 2020-12-05
    • 1970-01-01
    • 2023-03-29
    • 2015-07-26
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    相关资源
    最近更新 更多