2016-07-06 48 views
0

我想在MongoDB中存储和查询地理坐标。我正在使用Ninja-mongodb模块的Ninjaframework,特别是使用Morphia。Ninjaframework,Morphia和地理空间索引

坐标实体看起来像这样

@Entity 
@Indexes({ 
    @Index(fields = @Field(value="coordinates", type = IndexType.GEO2DSPHERE)) 
}) 
public class Place { 
    @Id 
    public ObjectId id; 
    public String google_places_id; 
    public String name; 
    public Point coordinates; 
} 

创建该对象,并查询他们看起来像这样

try { 
     List<models.lc.core.Place> lcPlaces = mongoDB.getDatastore().find(Place.class).field("coordinates").near(lat, lng).asList(); 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.configure( DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     Places places = mapper.readValue(Http.Get(url), Places.class); 
     for(models.google.Place place:places.results) { 
      models.lc.core.Place p = new models.lc.core.Place(); 
      p.name = place.name; 
      p.coordinates = GeoJson.point(place.geometry.location.lat, place.geometry.location.lng); 
      p.google_places_id = place.place_id; 
      mongoDB.save(p); 
     } 
     return new Result(HttpStatus.OK_200).json().render(places); 
     //return new Result(HttpStatus.OK_200).text().render(Http.dumpInputStream(Http.Get(url))); 
    } 
    catch (Exception e){ 
     Places response = new Places(); 
     response.status = url; 
     return new Result(HttpStatus.BAD_REQUEST_400).json().render(e); 
    } 

我收到此错误信息

"errorMessage": "error processing query: ns=core-api.PlaceTree: GEONEAR field=coordinates maxdist=1.79769e+308 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query", 
"errorCode": 2, 
"message": "Query failed with error code 2 and error message 'error processing query: ns=core-api.PlaceTree: GEONEAR field=coordinates maxdist=1.79769e+308 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query' on server localhost:27017", 
"localizedMessage": "Query failed with error code 2 and error message 'error processing query: ns=core-api.PlaceTree: GEONEAR field=coordinates maxdist=1.79769e+308 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query' on server localhost:27017", 
"suppressed": [] 

我的代码试图调用mongoDB.ensureIndexes(true);它确实在坐标上创建索引。但我仍然收到上面粘贴的错误。

互联网没有提供帮助,我希望有人可以。

非常感谢提前!

+0

手动创建索引后,它的工作原理,所以问题在于创建注释索引 - 我认为 – rudkjobing

回答

0

你能提交一个由morphia创建的索引定义的issue和你手工创建的索引定义吗?如果morphia造成不好的指数,我希望得到修正。谢谢。

+0

感谢您的回复,我会尽快提出问题。 – rudkjobing

相关问题