Détails Nitty-Gritty
Lire la dernière source Mongo , il y a essentiellement 2 cas lors de comparaisons impliquant null :
- Si les types canoniques des éléments BSON comparés sont différents, seules les comparaisons d'égalité (
==,>=,<=) de null &undefined renverratrue; sinon toute comparaison avecnullrenverrafalse.
Remarque : Aucun autre type BSON n'a le même type canonique quenull. - Si les types canoniques sont identiques (c'est-à-dire que les deux éléments sont
null), puis compareElementValues est appelé. Pournull, cela renvoie simplement la différence entre le canonical taper des deux éléments BSON puis effectue la comparaison demandée avec0.
Par exemple,null > nullse traduirait par(5-5) > 0 --> Falsecar le type canonique de null est 5.
De même,null < nullse 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.