MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Opérateurs de comparaison MongoDB avec null

Détails Nitty-Gritty

Lire la dernière source Mongo , il y a essentiellement 2 cas lors de comparaisons impliquant null :

  1. Si les types canoniques des éléments BSON comparés sont différents, seules les comparaisons d'égalité (== , >= , <= ) de null &undefined renverra true; sinon toute comparaison avec null renverra false .
    Remarque : Aucun autre type BSON n'a le même type canonique que null .
  2. Si les types canoniques sont identiques (c'est-à-dire que les deux éléments sont null ), puis compareElementValues est appelé. Pour null , cela renvoie simplement la différence entre le canonical taper des deux éléments BSON puis effectue la comparaison demandée avec 0 .
    Par exemple, null > null se traduirait par (5-5) > 0 --> False car le type canonique de null est 5.
    De même, null < null se traduirait par (5-5) < 0 --> False .

Cela signifie null ne peut jamais être égal à null ou undefined . Toute autre comparaison impliquant null renverra toujours false .

Est-ce un bogue ?

Réponse mise à jour :

La documentation des opérateurs de comparaison ($gt , $lt ) référence la documentation que vous avez initialement liée , ce qui implique que les opérateurs de comparaison devraient travailler avec null . De plus, le tri des requêtes (c'est-à-dire , db.find().sort() ) fait suivre avec précision le comportement de comparaison/tri documenté.

C'est pour le moins incohérent. Je pense que cela vaudrait la peine de soumettre un rapport de bogue au site JIRA de MongoDB .

Réponse originale :

Je ne pense pas que ce comportement soit un bogue.

Le consensus général pour Javascript est-ce undefined signifie non attribué tandis que null signifie attribué mais autrement indéfini . Les comparaisons de valeur avec undefined, à part l'égalité, n'ont aucun sens, du moins au sens mathématique.

Étant donné que BSON s'inspire fortement de JavaScript, cela s'applique également à MongoDB.