Título: Uso de Collation en proyecto Jhipster, Spring, MongoDB
Autor: Isma (fharem@gmail.com)
Fecha Creación: 26/enero/2023
Qué es un Collation
Collation permite al usuario definir reglas del lenguaje para comparar cadenas de texto, por ejemplo, diferenciar minúsculas o reconocer acentos. Se puede usar un collation en una colección, vista, índice o para realizar operaciones como lo haces en una colección.
Más información en: https://www.mongodb.com/docs/manual/reference/collation/
Uso de collation en una consulta del Repository
En tu clase Repository que debe extender por ejemplo a ReactiveMongoRepository, puedes definir consultas usando un collation de la siguiente manera:
/**
* Método para buscar un Dragon por clave
*/
@Query(collation = "{ 'locale' : ?1 , 'strength': ?2 }")
Mono<Dragon> findByClave(String clave, String locale, int stregth);
NOTA: Es importante revisar la siguiente referencia: lenguajes y locales soportados por mongoDB para comprender cómo se usan los valores locale y stregth.
Crear un índice usando un collation
Usando el template de Mongo, se puede hacer de la siguiente manera:
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.index.Index;
import org.springframework.data.mongodb.core.query.Collation;
import org.springframework.data.mongodb.core.query.Collation.CollationLocale;
...
@Execution
public void creaIndexDragonClave(MongoTemplate mongoTemplate) {
mongoTemplate.indexOps(Area.class)
.ensureIndex(new Index().on(FIELD_DRAGON_CLAVE, Direction.ASC)
.named("idx_dragon_clave")
.unique()
.collation(
Collation.of(Constants.COLLATION_LOCALE)
.strength(Constants.COLLATION_STRENGTH))
);
}
...
NOTA: Algo importante a tener en cuenta, es que el índice se crea con un collation, pero si se quiere realizar una consulta usando esas reglas del lenguaje, se debe utilizar también el collation en la consulta.