Принудительный порядок свойств в сопоставлении Spring Data MongoDB - PullRequest
3 голосов
/ 09 июня 2011

У меня есть объект Location, который мне нужен, чтобы принудительно упорядочить порядок свойств, когда они сохраняются в mongodb, но мне не очень повезло, когда я понял, как это сделать.Класс Location выглядит примерно так:

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

Когда он сохраняется в монго, округ всегда перед широтой и долготой.Это проблема, потому что я пытаюсь поместить геоиндекс на него, и первые два свойства должны быть широта / долгота.

Я пробовал:

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

Это работает, когда местоположениеОбъект сериализуется в XML для моего клиента, но не для БД.Кажется, что весенние данные или какой-то картограф Монго всегда делают вещи в алфавитном порядке.

Кто-нибудь знает, как заставить свойства заказа сохраняться в монго?Спасибо!

Ответы [ 4 ]

7 голосов
/ 04 октября 2012

Вы можете использовать атрибут порядка аннотации @Field, чтобы изменить порядок полей.Итак, если у вас есть:

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

   @Field(order = 2)
   float lon;

   @Field(order = 3)
   County county;
}

поля сохраняются в следующем порядке: широта, долгота, графство.

1 голос
/ 11 июня 2011

Точно так же, как все знают, я разговаривал с разработчиками Spring, и они попросили меня представить JIRA для этой проблемы, потому что сейчас нет способа сделать это.JIRA можно найти здесь: https://jira.springsource.org/browse/DATADOC-172

0 голосов
/ 24 января 2013

Для полноты я закончил создание объекта Point, который содержит широту / долготу и проиндексировал этот объект.Таким образом, это было единственное в объекте, и порядок не имел значения.

В связанной заметке, только сегодня я узнал, что если вы хотите выполнять пространственные запросы, вы ДОЛЖНЫ хранить свои свойства в следующем порядке: долгота, широта.Вы можете увидеть здесь для получения дополнительной информации, но я сегодня уже какое-то время стучал головой об стену, поэтому, если вы храните баллы для гео-запросов, убедитесь, что они находятся в правильном порядке.Все это означает, что вы ставите долготу на первое место в своем классе.Я полагаю, вы могли бы также аннотировать их с помощью атрибута @Field.

0 голосов
/ 09 июня 2011

Неясно, что вы используете для конвертации ваших POJO в MongoDB. Картографы, такие как Morphia (http://code.google.com/p/morphia) будет использовать порядок полей, как объявлено в вашем классе. Существуют варианты управления этим также различными способами.

Если это проблема Spring Data (framework), я бы предложил обратиться к их форумам за поддержкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...