ソート操作で異なる BSON types の値を比較する場合、MongoDB は最小値から最大値の順に次の比較順序を使用します。
MinKey(内部型)
null
数値(ints、longs、doubles、decimals)
シンボル、文字列
オブジェクト
配列
BinData
ObjectId
ブール値
日付
タイムスタンプ
正規表現
JavaScriptコード
JavaScript コード(スコープ付き)
MaxKey(内部型)
集計式は型間で比較を行います。詳細については、「比較演算子」を参照してください。
注意
MongoDB は、ターゲットフィールドのBSON型 が 型のブラケット処理 を通じてクエリオペランドの型と一致するドキュメントに対してのみ、 比較クエリ述語演算子 による比較を強制します。
数値タイプ
MongoDBは、一部の型を比較の目的で同等と見なします。たとえば、すべての数値型は比較の際に同等と見なされます。
文字列
バイナリ比較
デフォルトでは、MongoDB は単純なバイナリ比較を使用して文字列を比較します。
照合
照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。
照合仕様の構文は次のとおりです。
{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> }
照合を指定する場合、locale フィールドは必須ですが、その他の照合フィールドはすべて任意です。フィールドの説明については、照合ドキュメントを参照してください。
コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。
配列
並び替え順
配列を含むフィールドをソートする場合:
昇順ソートでは、 BSON型のソート順で配列の最小要素が比較されます。
降順ソートでは、 BSON型のソート順の逆順で配列の最大要素が比較されます。
値が 1 要素配列(例えば、
[ 1 ])のフィールドと値が配列以外(例えば、2)のフィールドについてソートすると、1と2についてソートされます。ソートでは、空の配列(例、
[ ])がnull値より前、またはフィールド値が欠落している場合に配置されます。ネストされた配列の一種(例:
[[1, 2], [3, 4]])は、最も外側の配列以降の任意の配列を辞書編集順にソートします。
比較演算子
配列を含むフィールドをクエリする場合:
比較クエリ述語演算子は、
$ltや$gtなど、クエリ値が配列の場合に 型ブラケットを強制します。ターゲット フィールドの値が配列の場合、演算子は配列に対して型ブラケット処理された比較を要素ごとに実行します。
比較演算子は配列を辞書的に比較します。
オブジェクト
MongoDB の BSON オブジェクトの比較では、次の順序が使用されます。
BSON オブジェクト内に出現する順序でキーと値のペアを再帰的に比較します。
フィールド型を比較します。MongoDB は、フィールド型に対して、最低から最高の順に次の比較順序を使用します。
MinKey(内部型)
null
数値(ints、longs、doubles、decimals)
シンボル、文字列
オブジェクト
配列
BinData
ObjectId
ブール値
日付
タイムスタンプ
正規表現
JavaScriptコード
JavaScript コード(スコープ付き)
MaxKey(内部型)
フィールド型が等しい場合は、キー フィールド名を比較します。
キー フィールド名が等しい場合は、フィールド値を比較します。
フィールド値が等しい場合は、次のキーと値のペアを比較します(手順 1 に戻ります)。それ以上のペアを持たないオブジェクトは、それ以上のペアを持つオブジェクトよりも小さくなります。
日付とタイムスタンプ
Date オブジェクトは Timestamp オブジェクトの前に並べ替えられます。
Non-existent Fields
比較では、存在しないフィールドはnull であるかのように扱われます。 ドキュメント { } と { a: null } の aフィールドで並べ替えを行うと、並べ替え順序においてドキュメントは同等として扱われます。
BinData
MongoDB は BinData を次の順序で並べ替えます。
最初は、データの長さまたはサイズ順。
次に、BSON 1 バイト サブタイプ順。
最後に、データ順(符号なしバイトでバイト単位の比較を実行)。