Prior of MongoDB version 3.4 we were unable to create index with case insensitive.
In version 3.4 has collation
option that allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks.
The collation option has the following syntax:
collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
where the locale field is mandatory; all other fields are optional.
To create index with case insensitive we need to use mandatory field locale and strength field for string comparison level. strength
allows value rage 1 – 5. read more about collation
The strength attribute determines whether accents or case are taken into account when collating or matching text
Example:
if strength=1 then role = Role = rôle
if strength=2 then role = Role < rôle
if strength=3 then role < Role < rôle
So we need to use strength=2
to create index. like:
db.collectionName.createIndex(
{ name: 1, formula: 1, type: 1 },
{
name: "fertilizer_idx",
collation: {locale: "en", strength: 2},
unique: true
}
)
N.B: collation
option is not available for text indexes.