ざらざらした詳細
最新の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にも当てはまります。