Mongodb combina caracteres acentuados como personaje subyacente

En la syntax de MongoDB “db.foo.find ()”, ¿cómo puedo decirle que coincida con todas las letras y sus versiones acentuadas?

Por ejemplo, si tengo una lista de nombres en mi base de datos:
João
François
Jesús

¿Cómo permitiría una búsqueda de las cadenas “Joao”, “Francois” o “Jesús” para que coincida con el nombre de stack?
Espero que no tenga que hacer una búsqueda como esta todo el tiempo:
db.names.find({name : /Fr[aã...][nñ][cç][all accented o characters][all accented i characters]s/ })

A partir de Mongo 3.2, puede usar $text y establecer $diacriticSensitive en false:

 { $text: { $search: , $language: , $caseSensitive: , $diacriticSensitive:  } } 

Consulte más en los documentos de Mongo: https://docs.mongodb.com/manual/reference/operator/query/text/

Sugiero que agregue un campo indexado como NameSearchable de cadenas simplificadas, por ejemplo

  • João -> JOAO
  • François -> FRANCOIS
  • Jesús -> JESÚS
  • Jürgen -> JUERGEN

La misma asignación que se utiliza al insertar nuevos elementos en la base de datos se puede utilizar al realizar búsquedas. Se conservará la cuerda original con la carcasa y los acentos correctos.

Lo que es más importante, la consulta puede hacer uso de la indexación. Las consultas que no distinguen entre mayúsculas y minúsculas y las expresiones regulares no pueden usar índices (con la excepción de expresiones regulares rooteadas) y crecerán prohibitivamente lentas en colecciones grandes.

Ah, y dado que las cadenas simplificadas se pueden crear a partir de las cadenas originales, no es un problema agregar esto a colecciones existentes.

En este blog: http://tech.rgou.net/es/php/pesquisas-nao-sensiveis-ao-caso-e-acento-no-mongodb-e-php/

Alguien usó el enfoque que estabas tratando de hacer. Hasta donde yo sé, esta es la única solución para la última versión de MongoDB.

Parece más bien una búsqueda de coincidencia aproximada que mongoDb no admite actualmente. Lo que puedes probar es:

/ 1. Almacene variaciones del nombre en un elemento separado en la colección para cada entrada. Luego, la consulta se puede ejecutar buscando si el término de búsqueda existe dentro de la matriz de variaciones.

o

/ 2. Almacene cadena soundex para cada uno de los nombres en la misma colección. Luego, para su cadena de búsqueda, obtenga una cadena soundex y consulte la base de datos, obtendrá un resultado que tiene un resultado de Soundex similar a su consulta. Puede filtrar y verificar esos datos más en su secuencia de comandos. ejemplo:

Código de Soundex para François = F652, Código de Soundex para Francois = F652

Código de Soundex para Jesús = J220, Código de Soundex para Jesús = J220

Consulte más aquí: http://creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm#SoundExConverter

Intereting Posts