比較/ソートの順序
ソート操作で異なる BSON types の値を比較する場合、MongoDB は最低から最高の順に次の比較順序を使用します。
MinKey(内部型)
null
数値(ints、longs、doubles、decimals)
シンボル、文字列
オブジェクト
配列
BinData
ObjectId
ブール値
日付
タイムスタンプ
正規表現
JavaScriptコード
MaxKey(内部型)
注意
数値タイプ
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]]
)は、最も外側の配列以降の任意の配列を辞書編集順に比較します。
注意
比較クエリ演算子 は、クエリが配列である場合に 型のブラケット処理 を強制します。インデックス付き値が配列の場合、 演算子はインデックス付き配列に対して要素ごとに型のブラケット処理比較を実行します。
オブジェクト
MongoDB の BSON オブジェクトの比較では、次の順序が使用されます。
BSON オブジェクト内に出現する順序でキーと値のペアを再帰的に比較します。
フィールド型を比較します。MongoDB は、フィールド型に対して、最低から最高の順に次の比較順序を使用します。
MinKey(内部型)
null
数値(ints、longs、doubles、decimals)
シンボル、文字列
オブジェクト
配列
BinData
ObjectId
ブール値
日付
タイムスタンプ
正規表現
JavaScriptコード
MaxKey(内部型)
フィールド型が等しい場合は、キー フィールド名を比較します。
キー フィールド名が等しい場合は、フィールド値を比較します。
フィールド値が等しい場合は、次のキーと値のペアを比較します(手順 1 に戻ります)。それ以上のペアを持たないオブジェクトは、それ以上のペアを持つオブジェクトよりも小さくなります。
日付とタイムスタンプ
Date オブジェクトは Timestamp オブジェクトの前に並べ替えられます。
Non-existent Fields
比較では、存在しないフィールドはnull であるかのように扱われます。 ドキュメント { }
と { a: null }
の a
フィールドで並べ替えを行うと、並べ替え順序においてドキュメントは同等として扱われます。
BinData
MongoDB は BinData
を次の順序で並べ替えます。
最初は、データの長さまたはサイズ順。
次に、BSON 1 バイト サブタイプ順。
最後に、データ順(符号なしバイトでバイト単位の比較を実行)。