如何在Play Morphia中设置2D索引?

时间:2012-06-30 01:51:27

标签: mongodb playframework morphia

如何在play morphia中设置2D索引?

示例:

db.places.ensureIndex( { loc : "2d" } )

http://www.mongodb.org/display/DOCS/Geospatial+Indexing

2 个答案:

答案 0 :(得分:1)

我认为你的意思是玩1.2.x。

您无法通过@Indexed注释执行此操作,似乎:http://code.google.com/p/morphia/issues/detail?id=290

你可以用这个有点hacky [未经测试]的代码来实现:

MorphiaPlugin.ds()
   .getMongo()
   .getDB('dbname')
   .getCollection('places')
   .ensureIndex(BasicDBObject(loc, "2d"));

但是您可能只想从shell中执行此操作,如您所示。这是一次性的事情。

答案 1 :(得分:0)

几年后,只需补充一下:

@Indexes(
        @Index(fields=@Field( value = "location", type= IndexType.GEO2DSPHERE))
)
@Entity类上的

(如果持有GeoPoint的成员称为location)将为球形地理空间查询生成正确的索引。

不要忘记将.near()方法的第4个参数设置为true(球形)。

此外,您还应确保在查询之前仅调用datastore.ensureIndexes()即可生成索引。