MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Pontos de escape do MongoDB '.' na chave do mapa]


Ao usar o Spring Data MongoDB, você obtém uma instância de:org.springframework.data.mongodb.core.convert.MappingMongoConverter que tem mapKeyDotReplacement definido como null por padrão - é por isso que você está recebendo uma exceção.

Você precisa criar sua própria instância de org.springframework.data.mongodb.core.convert.MappingMongoConverter ou apenas modifique a instância existente usando seu método setter de provedor:
/**
 * Configure the characters dots potentially contained in a {@link Map} shall be replaced with. By default we don't do
 * any translation but rather reject a {@link Map} with keys containing dots causing the conversion for the entire
 * object to fail. If further customization of the translation is needed, have a look at
 * {@link #potentiallyEscapeMapKey(String)} as well as {@link #potentiallyUnescapeMapKey(String)}.
 * 
 * @param mapKeyDotReplacement the mapKeyDotReplacement to set
 */
public void setMapKeyDotReplacement(String mapKeyDotReplacement) {
    this.mapKeyDotReplacement = mapKeyDotReplacement;
}

No MongoDB, o ponto é sempre tratado como um caractere especial, portanto, evitá-lo provavelmente economizará outra dor de cabeça no futuro.

EDIT:Para substituir o padrão MappingMongoConverter adicione a seguinte declaração de bean:
  @Bean
  public MappingMongoConverter mongoConverter(MongoDbFactory mongoFactory) throws Exception {
    DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoFactory);
    MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
    mongoConverter.setMapKeyDotReplacement(".");

    return mongoConverter;
  }