Da mongodb 3.2 , indici di testo sono insensibili ai segni diacritici:
Con la versione 3, l'indice di testo è insensibile ai segni diacritici. Cioè, l'indice non distingue tra i caratteri che contengono segni diacritici e la loro controparte non contrassegnata, come é, ê ed e. Più in particolare, l'indice di testo elimina i caratteri classificati come segni diacritici nell'elenco delle proprietà del database dei caratteri Unicode 8.0.
Quindi la seguente query dovrebbe funzionare:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
ma sembra che ci sia un bug con la dieresi ( ¨ ), anche se è classificato come diacritico nell'elenco unicode 8.0 (problema su JIRA:SERVER-29918 )
Soluzione
da mongodb 3.4 puoi utilizzare le regole di confronto che ti consentono di eseguire questo tipo di query:
ad esempio, per ottenere l'output previsto, eseguire la query seguente:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
questo produrrà:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
nella confronto, strength
è il livello di confronto da eseguire
- 1 :solo carattere di base
- 2 :diacritico sensibile
- 3 :case sensitive + diacritic sensitive