2016-07-06 3 views
0

Я пытаюсь сохранить и запросить географические координаты в MongoDB. Я использую Ninjaframework с модулем ninja-mongodb, в частности, используя Morphia.Ninjaframework, Morphia и GeoSpatial indexes

Субъект с координатами выглядит следующим образом

@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": [] 

I попытались вызвать mongoDB.ensureIndexes (true); который создает индекс по координатам. Но я все еще получаю ошибку, которую я вставил выше.

В интернете нет никакой помощи, я надеюсь, что кто-то там может.

Большое спасибо заранее!

+0

После ручного создания индекса он работает, поэтому проблема заключается в создании аннотированного индекса - я думаю, – rudkjobing

ответ

0

Можете ли вы указать issue с определением индекса, созданным морфией, и тем, что вы создали вручную? Если морфия создает плохие индексы, я бы хотел, чтобы это было исправлено. Благодарю.

+0

Спасибо за ваш ответ, я напишу о проблеме как можно скорее. – rudkjobing