我有一个Location对象,当它们被持久化到mongodb时我需要强制它们的顺序,但是我没有太多的运气弄清楚如何去做。 Location类看起来像:
Location {
float lat;
float lon;
County county;
}
当它被持续到mongo时,县总是在拉特和伦之前。这是一个问题,因为我试图在其上放置一个geoindex,前两个属性必须是lat / long。
我试过了:
@XmlRootElement(name="location")
@XmlType(propOrder={"latitude", "longitude", "county"})
Location {
float lat;
float lon;
County county;
}
当location对象被序列化为xml到我的客户端,而不是DB。似乎spring数据或某些mongo mapper总是按字母顺序执行操作。
有谁知道如何强制将订单属性保存到mongo中? 谢谢!
答案 0 :(得分:7)
您可以使用@Field注释的order属性强制字段顺序。所以,如果你有:
Location {
@Field(order = 1)
float lat;
@Field(order = 2)
float lon;
@Field(order = 3)
County county;
}
字段按以下顺序保留:lat,lon,county。
答案 1 :(得分:1)
大家都知道,我一直在与Spring开发人员交谈,他们让我提交JIRA来解决这个问题,因为现在无法做到这一点。 JIRA可以在这里找到: https://jira.springsource.org/browse/DATADOC-172
答案 2 :(得分:0)
目前还不清楚您从POJO转换为MongoDB的用途。 Morphia(http://code.google.com/p/morphia)等映射器将使用您班级中声明的字段顺序。有各种方法可以控制这种情况。
如果这是一个Spring Data(框架)问题,我建议前往他们的论坛寻求支持。
答案 3 :(得分:0)
为了完整起见,我最终创建了一个Point对象,其中包含lat / long和索引的对象。这样,它是对象中唯一的东西,顺序无关紧要。
在相关的说明中,就在今天我了解到您是否想要进行空间查询,您必须按以下顺序存储您的属性:经度,纬度。你可以看到here了解更多信息,但是今天我用头撞到了墙上一段时间,所以如果你要存储地理查询点,请确保按正确的顺序排列。所有这些意味着你将经度放在班上。我想你也可以使用@Field属性来注释它们。