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
我正在为我的项目使用 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