Siden mongodb 3.2 , tekstindekser er diakritisk ufølsomme:
Med version 3 er tekstindekset diakritisk ufølsomt. Det vil sige, at indekset ikke skelner mellem tegn, der indeholder diakritiske tegn, og deres ikke-markerede modstykke, såsom é, ê og e. Mere specifikt fjerner tekstindekset de tegn, der er kategoriseret som diakritiske tegn i Unicode 8.0 Character Database Prop List.
Så følgende forespørgsel burde virke:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
men det ser ud til, at der er en fejl med dieresis (¨), selvom den er kategoriseret som diakritisk i unicode 8.0-listen (udgave på JIRA:SERVER-29918)
Løsning
siden mongodb 3.4 du kan bruge sortering, som giver dig mulighed for at udføre denne form for forespørgsel:
for eksempel, for at få dit forventede output, skal du køre følgende forespørgsel:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
dette vil udsende:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
i sorteringen, strength
er sammenligningsniveauet, der skal udføres
- 1 :kun grundtegn
- 2 :diakritisk følsom
- 3 :følsomme mellem store og små bogstaver + diakritisk følsom