Сохранить точки "."в ключе как поле в MongoDB с использованием SpringBoot - PullRequest
0 голосов
/ 09 октября 2019

У меня есть данные json, где ключ содержит точки как 123.456 и значение как объект.

  {
        "models": {
            "123.456": [{
                "key1": "value1",
                "key2": "value2"
            }]
        }
    }

При попытке сохранить объект в MongoDB я получаю исключение при отображении следующим образом:

org.springframework.data.mapping.model.MappingException: Map key 123.456 contains dots but no replacement was configured!Make sure map keys don't contain dots in the first place or configure an appropriate replacement!

Есть ли поддержка для сохранения ключа в виде поля, содержащего точки, в Spring Mongo

1 Ответ

0 голосов
/ 09 октября 2019

Вы должны использовать MappingMongoConverter класс. Он имеет метод setMapKeyDotReplacement(String mapKeyDotReplacement).

В соответствии с документами Spring-MongoDB :

Метод setMapKeyDotReplacement(String mapKeyDotReplacement) проверяет, является литочки присутствуют на карте или нет. Если он найден, его следует заменить указанным символом.

Пример использования:

@Component
public class Example {

    @Autowired
    private MappingMongoConverter mappingMongoConverter;

    public void replaceKeyContainingDot() {
      mappingMongoConverter.setMapKeyDotReplacement("pass here the character you want to replace the dots with");
    }

} 

Примечание: из Документы MongoDB :

Использование $ и. в именах полей не рекомендуется и не поддерживается официальными драйверами MongoDB.

Существует обходной путь, который я нашел из документации. Возможно, вам придется переопределить методы potentiallyEscapeMapKey(String source) и potentiallyUnescapeMapKey(String source) из класса MappingMongoCoverter.

Пожалуйста, обратитесь к этим популярным SO вопросам здесь для получения дополнительной информации и лучшего понимания:

  1. Как настроить MappingMongoConverter (setMapKeyDotReplacement) в Spring-Boot без нарушения автоконфигурации?

  2. Точки MongoDB-Escape '.'в ключе карты

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