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

MongoDB $ si es nulo

En MongoDB, $ifNull es un operador de tubería de agregación que le permite especificar un valor para usar en lugar de null .

La forma en que funciona es que proporciona una expresión y una expresión de reemplazo. Si la expresión se evalúa como un valor no nulo, se devuelve esa expresión. Pero si la expresión se evalúa como un valor nulo, $ifNull devuelve el valor de la expresión de reemplazo.

Un valor nulo incluye instancias de valores indefinidos o campos faltantes.

Ejemplo

Supongamos que tenemos una colección llamada test con los siguientes documentos:

{ "_id" : 1, "data" : 250 }
{ "_id" : 2, "data" : -250 }
{ "_id" : 3, "data" : "Bucket" }
{ "_id" : 4, "data" : 0 }
{ "_id" : 5, "data" : ISODate("2021-01-03T23:30:15.100Z") }
{ "_id" : 6, "data" : null }
{ "_id" : 7, "data" : Infinity }
{ "_id" : 8, "data" : -Infinity }

Esto es lo que sucede si usamos $ifNull operador en los data campo:

db.test.aggregate(
   [
     {
       $project:
          {
            result: { $ifNull: [ "$data", "Value not provided" ] }
          }
     }
   ]
)

Resultado:

{ "_id" : 1, "result" : 250 }
{ "_id" : 2, "result" : -250 }
{ "_id" : 3, "result" : "Bucket" }
{ "_id" : 4, "result" : 0 }
{ "_id" : 5, "result" : ISODate("2021-01-03T23:30:15.100Z") }
{ "_id" : 6, "result" : "Value not provided" }
{ "_id" : 7, "result" : Infinity }
{ "_id" : 8, "result" : -Infinity }

Podemos ver que solo un campo tenía un valor nulo y por lo tanto, era el único que devolvía "Value not provided" .

Campos indefinidos y faltantes

Como se mencionó, los valores indefinidos y los campos faltantes se tratan como valores nulos.

Supongamos que agregamos los siguientes documentos a nuestra colección:

{ "_id" : 9, "data" : undefined }
{ "_id" : 10, "name" : "Homer" }

En este caso, el documento 9 tiene undefined en el campo de datos, pero el documento 10 ni siquiera tiene un data campo.

Esto es lo que sucede cuando aplicamos $ifNull a esos documentos:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 9, 10 ] } } },
     {
       $project:
          {
            result: { $ifNull: [ "$data", "Value not provided" ] }
          }
     }
   ]
)

Resultado:

{ "_id" : 9, "result" : "Value not provided" }
{ "_id" : 10, "result" : "Value not provided" }