我有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中是否支持将密钥另存为包含点的字段?
答案 0 :(得分:0)
您必须使用MappingMongoConverter
类。它具有setMapKeyDotReplacement(String mapKeyDotReplacement)
方法。
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问题以获取更多信息和更好的理解: