sql >> Base de Datos >  >> NoSQL >> MongoDB

Operadores de comparación MongoDB con nulo

Detalles esenciales

Leyendo la última fuente de Mongo , básicamente hay 2 casos al hacer comparaciones que involucran null :

  1. Si los tipos canónicos de los elementos BSON que se comparan son diferentes, solo comparaciones de igualdad (== , >= , <= ) de nulo e indefinido devolverá true; de lo contrario, cualquier comparación con null devolverá false .
    Nota: Ningún otro tipo de BSON tiene el mismo tipo canónico que null .
  2. Si los tipos canónicos son iguales (es decir, ambos elementos son null ), luego compareElementValues se llama. Para null , esto solo devuelve la diferencia entre el canónico escribir de ambos elementos BSON y luego realiza la comparación solicitada contra 0 .
    Por ejemplo, null > null se traduciría a (5-5) > 0 --> False porque el tipo canónico de nulo es 5.
    Del mismo modo, null < null se traduciría a (5-5) < 0 --> False .

Esto significa null solo puede ser igual a null o undefined . Cualquier otra comparación que involucre null siempre devolverá false .

¿Es esto un error?

Respuesta actualizada:

La documentación para los operadores de comparación ($gt , $lt ) hace referencia a la documentación que vinculó originalmente , lo que implica que los operadores de comparación deberían trabajar con null . Además, la clasificación de consultas (es decir, , db.find().sort() ) hace siga con precisión el comportamiento documentado de Comparación/Ordenación.

Esto es, por lo menos, inconsistente. Creo que valdría la pena enviar un informe de error al sitio JIRA de MongoDB .

Respuesta original:

No creo que este comportamiento sea un error.

El consenso general para Javascript es eso undefined significa sin asignar mientras que null significa asignado pero no definido . Las comparaciones de valores contra indefinidos, aparte de la igualdad, no tienen sentido, al menos en un sentido matemático.

Dado que BSON se basa en gran medida en JavaScript, esto también se aplica a MongoDB.