ざらざらした詳細
最新のMongoソースを読む 、nullを含む比較を行う場合は基本的に2つのケースがあります :
- 正規タイプ 比較されるBSON要素の数は異なり、同等性の比較のみです(
==、>=、<=)null&undefinedの場合、trueが返されます;それ以外の場合は、nullとの比較falseを返します 。
注:nullと同じ正規タイプを持つBSONタイプは他にありません。 。 - 正規タイプ は同じです(つまり、両方の要素が
null)、次に compareElementValues と呼ばれます。nullの場合 、これは、canonicalの違いを返すだけです。タイプ 両方のBSON要素の比較を行い、要求された比較を0に対して実行します。 。
たとえば、null > null(5-5) > 0 --> Falseに変換されます nullの正規型は5であるためです。
同様に、null < null(5-5) < 0 --> Falseに変換されます 。
これはnullを意味します nullにのみ等しくなることができます またはundefined 。 nullを含むその他の比較 常にfalseを返します 。
これはバグですか?
更新された回答:
比較演算子のドキュメント( $ gt
、 $ lt
)参照最初にリンクしたドキュメント 、これは、比較演算子がすべきであることを意味します nullを使用する 。さらに、クエリの並べ替え(つまり 、db.find().sort() )します 文書化された比較/ソート動作に正確に従ってください。
これは、少なくとも一貫性がありません。 MongoDBのJIRAサイト にバグレポートを送信する価値があると思います。 。
元の回答:
この動作はバグではないと思います。
Javascriptの一般的なコンセンサス
そのundefined 未割り当てを意味します null 割り当てられているが未定義を意味します 。平等を除いて、未定義に対する値の比較は、少なくとも数学的な意味では意味がありません。
BSONがJavaScriptを多用していることを考えると、これはMongoDBにも当てはまります。