我正在为我的项目使用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。我怎么得到这个?
答案 0 :(得分:1)
您可以在查询中指定排序方向:
query.with(new Sort(Sort.Direction.ASC, "field"));
正如您在评论中提到的,上面的答案对GeoPoint不起作用。您可以在此处找到替代解决方案:Spring mongoTemplate. Sort is not working in geo query (NearQuery)
这个答案有点陈旧,不确定现在有什么新东西(2016)。
它使用$geoWithin
和$centerSphere