Detalhes minuciosos
Lendo a fonte Mongo mais recente , há basicamente 2 casos ao fazer comparações envolvendo
null
:- Se os tipos canônicos dos elementos BSON sendo comparados são diferentes, apenas comparações de igualdade (
==
,>=
,<=
) de null &undefined retornarátrue
; caso contrário, qualquer comparação comnull
retornaráfalse
.
Observação: Nenhum outro tipo BSON tem o mesmo tipo canônico quenull
. - Se os tipos canônicos são iguais (ou seja, ambos os elementos são
null
), em seguida, compareValuesElemento é chamado. Paranull
, isso apenas retorna a diferença entre o canônico digite de ambos os elementos BSON e, em seguida, realiza a comparação solicitada com0
.
Por exemplo,null > null
traduziria em(5-5) > 0 --> False
porque o tipo canônico de null é 5.
Da mesma forma,null < null
traduziria em(5-5) < 0 --> False
.
Isso significa
null
só pode ser igual a null
ou undefined
. Qualquer outra comparação envolvendo null
sempre retornará false
. Isso é um bug?
Resposta atualizada:
A documentação dos operadores de comparação ($gt , $lt ) referencia a documentação que você vinculou originalmente , o que implica que os operadores de comparação devem trabalhar com
null
. Além disso, a classificação de consultas (ou seja, , db.find().sort()
) faz seguir com precisão o comportamento de Comparação/Classificação documentado. Isso é, no mínimo, inconsistente. Acho que valeria a pena enviar um relatório de bug para o site JIRA do MongoDB .
Resposta Original:
Eu não acho que esse comportamento é um bug.
O consenso geral para Javascript isso é
undefined
significa não atribuído enquanto null
significa atribuído, mas de outra forma indefinido . Comparações de valor com indefinido, além da igualdade, não fazem sentido, pelo menos no sentido matemático. Dado que o BSON se baseia fortemente em JavaScript, isso também se aplica ao MongoDB.