Spring-data MongoDB地理查询
Posted
技术标签:
【中文标题】Spring-data MongoDB地理查询【英文标题】:Spring-data mongodb geo query 【发布时间】:2012-09-22 20:27:09 【问题描述】:我正在使用 spring-data 与 mongodb 通信,我正在寻找一种执行地理查询的方法,该查询将通过数据库中给定的地理点检索附近的配置文件,我对查询的要求是:
1) 距离限制 2) 返回配置文件数量的限制 3) 根据配置文件中的时间字段进行额外搜索 4) 从检索到的文档中包含/排除字段的能力
一开始我用的是mongoTemplate.geoNear方法...
Query criteria = new Query(Criteria.where("time").gte("some_date"));
criteria.fields().exclude("friends");
NearQuery query = NearQuery.near(point).maxDistance(maxDistance)
.num(limit).query(criteria);
GeoResults<Profile> result = mongoTemplate
.geoNear(query, Profile.class);<br/>
但后来我意识到 mongo 不支持在 geoNear 查询中包含/排除字段。 所以我正在考虑 Near 查询,似乎在 spring-data 中执行这种“复杂”查询的唯一方法是使用 @Query 注释,是否存在在那种查询中支持上述要求 2,3 的方法?还有其他方法吗? 谢谢
【问题讨论】:
你找到解决办法了吗? Assaf - 你找到解决方案了吗?请帮帮我.. 谢谢,内哈 这里有什么消息吗?如何排除字段? 【参考方案1】:你的问题实际上包含了你需要的所有答案。您只需要使用 query.addCriteria 将它们放在一起即可。
1:使用带半径的圆 2. 使用 Query.limit(count) 3. 使用 Query.where("date").gte() 4. 使用字段来预测结果
给你
Point point = new Point(6.12343, 3.121211);
Distance distance = new Distance(100, Metrics.KILOMETERS);
Circle circle = new Circle(point, distance);
Integer resultLimit = 20; //Limit to 20 records
Criteria geoCriteria = Criteria.where("position").withinSphere(circle);
Criteria timeCriteria = Criteria.where("time").gte(new Date());
Query query = Query.query(geoCriteria);
query.addCriteria(timeCriteria);
query.fields().exclude("friends");
mongoTemplate.find(query, Profile.class);
【讨论】:
以上是关于Spring-data MongoDB地理查询的主要内容,如果未能解决你的问题,请参考以下文章
通过 spring-data 迭代 MongoDB 中的大型集合
在 MongoDB 的 spring-data 中配置 GridFS 模板
使用 Spring-Data 配置 MongoDb 时出现异常