- Introduction to MongoDB >
- BSON Types >
- Comparison/Sort Order
Comparison/Sort Order¶
When comparing values of different BSON types, MongoDB uses the following comparison order, from lowest to highest:
- MinKey (internal type)
- Null
- Numbers (ints, longs, doubles, decimals)
- Symbol, String
- Object
- Array
- BinData
- ObjectId
- Boolean
- Date
- Timestamp
- Regular Expression
- MaxKey (internal type)
Numeric Types¶
MongoDB treats some types as equivalent for comparison purposes. For instance, numeric types undergo conversion before comparison.
Strings¶
Binary Comparison¶
By default, MongoDB uses the simple binary comparison to compare strings.
Collation¶
New in version 3.4.
Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks.
Collation specification has the following syntax:
When specifying collation, the locale
field is mandatory; all
other collation fields are optional. For descriptions of the fields,
see Collation Document.
If no collation is specified for the collection or for the operations, MongoDB uses the simple binary comparison used in prior versions for string comparisons.
Arrays¶
With arrays, a less-than comparison or an ascending sort compares the
smallest element of arrays, and a greater-than comparison or a
descending sort compares the largest element of the arrays. As such,
when comparing a field whose value is a single-element array (e.g. [
1 ]
) with non-array fields (e.g. 2
), the comparison is between
1
and 2
. A comparison of an empty array (e.g. [ ]
) treats
the empty array as less than null
or a missing field.
Objects¶
MongoDB’s comparison of BSON objects uses the following order:
- Recursively compare key-value pairs in the order that they appear within the BSON object.
- Compare the key field names.
- If the key field names are equal, compare the field values.
- If the field values are equal, compare the next key/value pair (return to step 1). An object without further pairs is less than an object with further pairs.
Dates and Timestamps¶
Date objects sort before Timestamp objects.
Non-existent Fields¶
The comparison treats a non-existent field as if it were an empty BSON
Object. As such, a sort on the a
field in documents { }
and {
a: null }
would treat the documents as equivalent in sort order.
BinData¶
MongoDB sorts BinData
in the following order:
- First, the length or size of the data.
- Then, by the BSON one-byte subtype.
- Finally, by the data, performing a byte-by-byte comparison.