3

我有一个 Location 对象,当它们持久保存到 mongodb 时,我需要强制属性的顺序,但是我没有太多运气弄清楚如何去做。Location 类看起来像:

Location {
   float lat;
   float lon;
   County county;
}

当它坚持到mongo时,县总是在纬度和经度之前。这是一个问题,因为我试图在其上放置一个地理索引,并且前两个属性必须是纬度/经度。

我努力了:

@XmlRootElement(name="location")
@XmlType(propOrder={"latitude", "longitude", "county"})
Location {
   float lat;
   float lon;
   County county;
}

当位置对象被序列化为 xml 到我的客户端而不是数据库时,这有效。似乎弹簧数据或某些 mongo 映射器总是按字母顺序做事。

有谁知道如何强制订单属性持久化到 mongo 中?谢谢!

4

4 回答 4

7

您可以使用 @Field 注释的 order 属性来强制字段顺序。所以,如果你有:

Location {
   @Field(order = 1)
   float lat;

   @Field(order = 2)
   float lon;

   @Field(order = 3)
   County county;
}

这些字段按以下顺序保留:纬度、经度、县。

于 2012-10-04T11:54:07.190 回答
1

大家都知道,我一直在与 Spring 开发人员交谈,他们要求我为这个问题提交一个 JIRA,因为现在没有办法做到这一点。JIRA 可以在这里找到: https ://jira.springsource.org/browse/DATADOC-172

于 2011-06-11T04:06:32.717 回答
0

为了完整起见,我最终制作了一个包含纬度/经度的 Point 对象并索引了该对象。这样,它是对象中唯一的东西,顺序无关紧要。

在相关的说明中,就在今天,我了解到如果您要进行空间查询,您必须按以下顺序存储您的属性:经度、纬度。您可以在此处查看更多信息,但我今天用这个把头撞到墙上有一段时间了,所以如果您要存储地理查询的点,请确保它们的顺序正确。这意味着你把经度放在班级的首位。我想您也可以使用 @Field 属性对它们进行注释。

于 2013-01-23T21:30:44.967 回答
0

目前尚不清楚您使用什么将 POJO 转换为 MongoDB。像 Morphia (http://code.google.com/p/morphia) 这样的映射器将使用您的类中声明的字段顺序。也有多种方式可以控制这一点。

如果这是 Spring Data(框架)问题,我建议前往他们的论坛寻求支持。

于 2011-06-09T14:36:41.790 回答