0

我正在使用 Play Framework v1.2.5 和连接到 MongoDB v2.4.5 的 MongoDB Morphia 模块 PlayMorphia v1.2.12。

我不知道如何使用 Morphia 进行地理空间查询。

例如,基本查询很好:

//save a test address
new Address(47.5, -122.3, "123 South Main Street", "Seattle", "WA", "98109").save();

//now find it
List<Address> address = Address.q().filter("city", "Seattle").filter("street", "123 South Main Street").asList();
assertEquals(address.get(0).street,"123 South Main Street");

但是,文档没有提及如何使用 MongoDB 的 $geoWithin $geoIntersects $near $nearSphere 查询。

正如文档中所暗示的,我尝试使用类似的东西,但它没有用。

List<Address> e = Address.q().filter("latlon near","[47.5, -122.3]").asList();
4

2 回答 2

1

我认为最终的问题是您要过滤的参数是字符串而不是双 []。尝试类似:Address.q().field("latlon").near(47.5, -122.3)。如果您特别想要 $geoWithin,您可以使用 .field("latlon").within(Shape.center(new Point(47.5, -122.3), someRadius)。对于该版本的 inside(),您需要 morphia 0.104。

于 2013-09-19T21:45:42.733 回答
0

我找到了一种方法来实现这一点,但是,它非常难看,因为需要转换结果。

List<Address> addresses = (List<Address>)(List<?>) Address.q().field("latlon").near(47.5, -122.3).asList();
于 2013-09-19T22:02:19.980 回答