MongoDBで地理座標を格納および照会しようとしています。私は、特にMorphiaを使って、Ninjaframeworkをninja-mongodbモジュールで使用しています。オブジェクトを作成し、それらを照会するコードは、このNinjaframework、Morphia、およびGeoSpatialのインデックス
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);
}
のように見えた座標を持つ
エンティティは、この
@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;
}
のように見える私は、このエラーメッセージ
"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)を呼び出そうとしました。座標上のインデックスを作成します。しかし、私はまだ私が上記の貼り付けエラーを取得します。
インターネットには何の助けもありません。
事前に感謝します。
手作業でインデックスが作成された後、問題がアノテーション付きインデックスの作成にあります。 – rudkjobing