Desde o mongodb 3.2 , índices de texto são diacríticos insensíveis:
Com a versão 3, o índice de texto é insensível a diacríticos. Ou seja, o índice não distingue entre caracteres que contêm sinais diacríticos e seus correspondentes não marcados, como é, ê e e. Mais especificamente, o índice de texto retira os caracteres categorizados como diacríticos na Lista de props do banco de dados de caracteres Unicode 8.0.
Portanto, a seguinte consulta deve funcionar:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
mas parece que há um bug com trema ( ¨ ), mesmo que seja classificado como diacrítico na lista unicode 8.0 (problema no JIRA:SERVER-29918 )
Solução
desde o mongodb 3.4 você pode usar o agrupamento que permite realizar esse tipo de consulta:
por exemplo, para obter a saída esperada, execute a seguinte consulta:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
isso irá produzir:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
no agrupamento,
strength
é o nível de comparação para realizar - 1 :apenas caractere base
- 2 :sensível ao diacrítico
- 3 :diferencia maiúsculas de minúsculas + diferencia diacríticos