MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Operadores de comparação do MongoDB com null

Detalhes minuciosos


Lendo a fonte Mongo mais recente , há basicamente 2 casos ao fazer comparações envolvendo null :
  1. 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 com null retornará false .
    Observação: Nenhum outro tipo BSON tem o mesmo tipo canônico que null .
  2. Se os tipos canônicos são iguais (ou seja, ambos os elementos são null ), em seguida, compareValuesElemento é chamado. Para null , isso apenas retorna a diferença entre o canônico digite de ambos os elementos BSON e, em seguida, realiza a comparação solicitada com 0 .
    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.