保存点“。”使用SpringBoot在MongoDB中将键作为字段输入

时间:2019-10-09 18:21:01

标签: spring mongodb spring-boot spring-mongodb

我有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 :(得分:0)

您必须使用MappingMongoConverter类。它具有setMapKeyDotReplacement(String mapKeyDotReplacement)方法。

根据Spring-MongoDB Docs

  

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 Docs

  

$和的使用。建议不要使用字段名称中的   由MongoDB官方驱动程序支持。

我从文档中找到了一种解决方法。您可能必须重写potentiallyEscapeMapKey(String source)类中的potentiallyUnescapeMapKey(String source)MappingMongoCoverter方法。

请参阅此处的常见SO问题以获取更多信息和更好的理解:

  1. How to customize MappingMongoConverter (setMapKeyDotReplacement) in Spring-Boot without breaking the auto-configuration?

  2. MongoDB-Escape dots '.' in map key