【发布时间】:2016-10-01 17:52:18
【问题描述】:
我的问题与 [这里][1] 相同。我创建了一个索引“2dsphere”,但是在从 Spring Java 中获取时,它告诉我在该特定列上创建一个索引以触发 find() 地理空间查询。你能告诉我如何从 Spring Java 中获取地理空间索引吗?
这是我在 mongodb 中的集合结构:
{
"_id" : ObjectId("5729f6f0daf5583ade68b277"),
"type" : "Feature",
"geometry" : {
"type" : "Polygon",
"coordinates" : [
[
[
-61.392147064209,
12.5836229324341
],
[
-61.3972930908203,
12.5838899612427
],
[
-61.401252746582,
12.5869073867798
],
[
-61.3977165222168,
12.5903301239014
],
[
-61.3904685974121,
12.5893573760986
],
[
-61.388843536377,
12.587965965271
],
[
-61.3890991210938,
12.5845184326172
],
[
-61.392147064209,
12.5836229324341
]
]
]
},
"properties" : {
"TZID" : "America/St_Vincent"
}
}
以及创建索引查询的查询:
db.timezone.createIndex({"geometry":"2dsphere"})
@Repository
public class MongoDaoImpl extends BaseMongoDaoImpl implements MongoDao{
public static final Logger logger=LoggerFactory.getLogger(MongoDaoImpl.class);
@Autowired
MongoTemplate mongoTemplate;
@Override
public String getTimezoneIdFromLatLong(Double lat, Double longi){
String TZId=null;
try{
Query query = new Query(new Criteria()
.and("geometry")
.near(new Point(lat, longi)).maxDistance(0)).limit(1);
query.fields().include("properties.TZID").exclude("_id");
logger.info("Mongo query : " + query.toString());
TZId = mongoTemplate.find(query, String.class,"timezone").get(0);
logger.info("Getting the TimezoneId of Lat and long : "+ TZId);
}catch(Exception e){
logger.error("Exception occured while getting TimezoneId from lat & long", e);
}
return TZId;
}
}
所以,我正在尝试运行上面的代码,然后它在控制台中给了我以下错误。
2016-06-03 12:15:52,185 [http-nio-8321-exec-3:a7827b0e-eb2e-4485-a385-e6a8a1dd765d] INFO :::, - Mongo 查询:查询:{“几何”: { "$near" : { $java : 点 [x=-61.338249, y=12.691054] }, "$maxDistance" : 0.0 } }, 字段: { "properties.TZID" : 1 , "_id" : 0},排序:空
524e89638c4d] 错误 :::, - 从 lat & long 获取 TimezoneId 时发生异常 org.springframework.data.mongodb.UncategorizedMongoDbException:查询失败,错误代码 2 和错误消息“错误处理查询:ns=services.timezone limit=1Tree: GEONEAR field=geometry maxdist=0 isNearSphere=0 种类: {} 项目:{属性.TZID:1,_id:0} 规划器返回错误:无法在服务器 localhost:27017 上找到 $geoNear 查询的索引;嵌套异常是 com.mongodb.MongoQueryException: Query failed with error code 2 and error message 'error processing query: ns=services.timezone limit=1Tree: GEONEAR field=geometry maxdist=0 isNearSphere=0 种类: {} 项目:{属性.TZID:1,_id:0} 规划器返回错误:无法在服务器 localhost:27017 上找到 $geoNear 查询的索引 在 org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:107) ~[spring-data-mongodb-1.9.1.RELEASE.jar:na] 在 org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2114) ~[spring-data-mongodb-1.9.1.RELEASE.jar:na]
【问题讨论】:
-
嗨 Priyanka,这不是 Stack Overflow 的主题,您能否展示您尝试过的内容,如果您遇到困难,我们可以提供帮助。请参阅我们的on-topic guide