sql >> データベース >  >> NoSQL >> MongoDB

nullのMongoDB比較演算子

    ざらざらした詳細

    最新のMongoソースを読むnullを含む比較を行う場合は基本的に2つのケースがあります :

    1. 正規タイプ 比較されるBSON要素の数は異なり、同等性の比較のみです(==>=<= )null&undefinedの場合、trueが返されます;それ以外の場合は、nullとの比較 falseを返します 。
      注: nullと同じ正規タイプを持つBSONタイプは他にありません。 。
    2. 正規タイプ は同じです(つまり、両方の要素がnull )、次に compareElementValues と呼ばれます。 nullの場合 、これは、canonicalの違いを返すだけです。タイプ 両方のBSON要素の比較を行い、要求された比較を0に対して実行します。 。
      たとえば、null > null (5-5) > 0 --> Falseに変換されます nullの正規型は5であるためです。
      同様に、null < null (5-5) < 0 --> Falseに変換されます 。

    これはnullを意味します nullにのみ等しくなることができます またはundefinednullを含むその他の比較 常にfalseを返します 。

    これはバグですか?

    更新された回答:

    比較演算子のドキュメント( $ gt $ lt )参照最初にリンクしたドキュメント 、これは、比較演算子がすべきであることを意味します nullを使用する 。さらに、クエリの並べ替え(つまりdb.find().sort()します 文書化された比較/ソート動作に正確に従ってください。

    これは、少なくとも一貫性がありません。 MongoDBのJIRAサイト にバグレポートを送信する価値があると思います。 。

    元の回答:

    この動作はバグではないと思います。

    Javascriptの一般的なコンセンサス そのundefined 未割り当てを意味します null 割り当てられているが未定義を意味します 。平等を除いて、未定義に対する値の比較は、少なくとも数学的な意味では意味がありません。

    BSONがJavaScriptを多用していることを考えると、これはMongoDBにも当てはまります。




    1. マングースプロミスの使い方-mongo

    2. クエリパラメータが機能しないGeoJSONポイントを使用したgeoNearへのMongoose呼び出し

    3. 現在利用可能:AWSで完全にホストされたMongoDBインスタンス

    4. オブジェクトの配列をRedisに保存する方法は?