cursor.collation()
On this page
Definition
cursor.collation(<collation document>)
Important
mongosh Method
This is a
mongosh
method. This is not the documentation forNode.js
or other programming language specific driver methods.In most cases,
mongosh
methods work the same way as the legacymongo
shell methods. However, some legacy methods are unavailable inmongosh
.For the legacy
mongo
shell documentation, refer to the documentation for the corresponding MongoDB Server release:For MongoDB API drivers, refer to the language specific MongoDB driver documentation.
New in version 3.4.
Specifies the collation for the cursor returned by the
db.collection.find()
. To use, append to thedb.collection.find()
.The
cursor.collation()
accepts the following collation document:{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> } When specifying collation, the
locale
field is mandatory; all other collation fields are optional. For descriptions of the fields, see Collation Document.FieldTypeDescriptionlocale
stringThe ICU locale. See Supported Languages and Locales for a list of supported locales.
To specify simple binary comparison, specify
locale
value of"simple"
.strength
integerOptional. The level of comparison to perform. Corresponds to ICU Comparison Levels. Possible values are:
ValueDescription1Primary level of comparison. Collation performs comparisons of the base characters only, ignoring other differences such as diacritics and case.2Secondary level of comparison. Collation performs comparisons up to secondary differences, such as diacritics. That is, collation performs comparisons of base characters (primary differences) and diacritics (secondary differences). Differences between base characters takes precedence over secondary differences.3Tertiary level of comparison. Collation performs comparisons up to tertiary differences, such as case and letter variants. That is, collation performs comparisons of base characters (primary differences), diacritics (secondary differences), and case and variants (tertiary differences). Differences between base characters takes precedence over secondary differences, which takes precedence over tertiary differences.
This is the default level.
4Quaternary Level. Limited for specific use case to consider punctuation when levels 1-3 ignore punctuation or for processing Japanese text.5Identical Level. Limited for specific use case of tie breaker.See ICU Collation: Comparison Levels for details.
caseLevel
booleanOptional. Flag that determines whether to include case comparison at
strength
level1
or2
.If
true
, include case comparison; i.e.When used with
strength:1
, collation compares base characters and case.When used with
strength:2
, collation compares base characters, diacritics (and possible other secondary differences) and case.
If
false
, do not include case comparison at level1
or2
. The default isfalse
.For more information, see ICU Collation: Case Level.
caseFirst
stringOptional. A field that determines sort order of case differences during tertiary level comparisons.
Possible values are:
ValueDescription"upper"Uppercase sorts before lowercase."lower"Lowercase sorts before uppercase."off"Default value. Similar to"lower"
with slight differences. See https://unicode-org.github.io/icu/userguide/strings/properties.html#customization for details of differences.numericOrdering
booleanOptional. Flag that determines whether to compare numeric strings as numbers or as strings.
If
true
, compare as numbers; i.e."10"
is greater than"2"
.If
false
, compare as strings; i.e."10"
is less than"2"
.Default is
false
.alternate
stringOptional. Field that determines whether collation should consider whitespace and punctuation as base characters for purposes of comparison.
Possible values are:
ValueDescription"non-ignorable"
Whitespace and punctuation are considered base characters."shifted"
Whitespace and punctuation are not considered base characters and are only distinguished at strength levels greater than 3.See ICU Collation: Comparison Levels for more information.
Default is
"non-ignorable"
.maxVariable
stringOptional. Field that determines up to which characters are considered ignorable when
alternate: "shifted"
. Has no effect ifalternate: "non-ignorable"
Possible values are:
ValueDescription"punct"
Both whitespaces and punctuation are "ignorable", i.e. not considered base characters."space"
Whitespace are "ignorable", i.e. not considered base characters.backwards
booleanOptional. Flag that determines whether strings with diacritics sort from back of the string, such as with some French dictionary ordering.
If
true
, compare from back to front.If
false
, compare from front to back.The default value is
false
.normalization
booleanOptional. Flag that determines whether to check if text require normalization and to perform normalization. Generally, majority of text does not require this normalization processing.
If
true
, check if fully normalized and perform normalization to compare text.If
false
, does not check.The default value is
false
.See https://unicode-org.github.io/icu/userguide/collation/concepts.html#normalization for details.
Examples
Consider a collection foo
with the following documents:
{ "_id" : 1, "x" : "a" } { "_id" : 2, "x" : "A" } { "_id" : 3, "x" : "á" }
The following operation specifies a query filter of x: "a"
. The
operation also includes a collation option with locale: "en_US"
(US English locale) and strength: 1
(compare base characters
only; i.e. ignore case and diacritics):
db.foo.find( { x: "a" } ).collation( { locale: "en_US", strength: 1 } )
The operation returns the following documents:
{ "_id" : 1, "x" : "a" } { "_id" : 2, "x" : "A" } { "_id" : 3, "x" : "á" }
If you do not specify the collation, i.e. db.collection.find( { x:
"a" } )
, the query would only match the following document:
db.foo.find( { x: "a" } )
You can chain other cursor methods, such as cursor.sort()
and cursor.count()
, to cursor.collation()
:
db.collection.find({...}).collation({...}).sort({...}); db.collection.find({...}).collation({...}).count();
Note
You cannot specify multiple collations for an operation. For example, you cannot specify different collations per field, or if performing a find with a sort, you cannot use one collation for the find and another for the sort.