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 avecnull
renverrafalse
.
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 > 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.