Working with Collations

1. Understanding Collation Options

FieldValuesEffect
localee.g. "en", "fr", "de_AT"Language rules
strength1-5Comparison level (1=primary, 3=default)
caseLevelboolCase sensitivity at strength 1 or 2
caseFirst"upper","lower","off"Tiebreak order
numericOrderingbool"2" < "10" when true
alternate"non-ignorable","shifted"Punctuation handling
maxVariable"punct","space"Variable elements
backwardsboolReverse secondary (French)
normalizationboolNFD normalize before compare

2. Setting Collection-Level Collation

FormEffect
createCollection("c", {collation: {...}})Default for all ops
ImmutableCannot change after creation

3. Using Query-Level Collation

FormEffect
find(...).collation({...})Override per query
Index useRequires matching index collation
db.users.find({ name: "alice" }).collation({ locale: "en", strength: 2 });

4. Setting Index Collation

FormNotes
createIndex({name:1}, {collation:{...}})Indexed values sorted per collation
Match requiredQuery collation must equal index collation

5. Configuring Case Sensitivity

strengthEffect
1Base letters only
2+ accents
3 (default)+ case
caseLevel: trueForce case-significance at lower strengths

6. Using Diacritic Sensitivity

strengthcafé vs cafe
1Equal
≥ 2Different

7. Using Numeric Ordering

SettingEffect
numericOrdering: false (default)"10" < "2" lexicographically
numericOrdering: true"2" < "10" numerically

8. Setting Alternate Handling

alternateEffect
"non-ignorable" (default)Punctuation participates
"shifted"Spaces/punctuation ignored except at strength 4

9. Configuring Normalization

SettingUse
normalization: trueCompare canonical forms (NFD)
CostSlightly slower

10. Using Locale-Specific Sorting

LocaleSort Rules
deä = a + e for some sorts
svå, ä, ö at end
tri / I distinct from ı / İ
zhPinyin order