Sedan mongodb 3.2 , textindex är diakritiskt okänsliga:
Med version 3 är textindex diakritiskt okänsligt. Det vill säga, indexet skiljer inte mellan tecken som innehåller diakritiska tecken och deras icke-markerade motsvarighet, såsom é, ê och e. Mer specifikt tar textindexet bort de tecken som kategoriseras som diakritiska tecken i Unicode 8.0 Character Database Prop List.
Så följande fråga borde fungera:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
men det ser ut som att det finns en bugg med diesis ( ¨ ), även om den är kategoriserad som diakritisk i unicode 8.0-listan (problem på JIRA:SERVER-29918 )
Lösning
sedan mongodb 3.4 du kan använda sortering som låter dig utföra den här typen av fråga:
till exempel, för att få din förväntade utdata, kör följande fråga:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
detta kommer att mata ut:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
i sorteringen, strength
är jämförelsenivån som ska utföras
- 1 :endast bastecken
- 2 :diakritisk känslig
- 3 :skiftlägeskänslig + diakritisk känslig