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 comnullretornará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 > nulltraduziria em(5-5) > 0 --> Falseporque o tipo canônico de null é 5.
Da mesma forma,null < nulltraduziria 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.