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

MongoDB $ifNull


No MongoDB, $ifNull é um operador de pipeline de agregação que permite especificar um valor a ser usado no lugar de null .

A maneira como funciona é que você fornece uma expressão e uma expressão de substituição. Se a expressão for avaliada como um valor não nulo, essa expressão será retornada. Mas se a expressão for avaliada como um valor nulo, $ifNull retorna o valor da expressão de substituição.

Um valor nulo inclui instâncias de valores indefinidos ou campos ausentes.

Exemplo


Suponha que tenhamos uma coleção chamada test com os seguintes 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 }

Veja o que acontece se usarmos o $ifNull operador nos 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 apenas um campo tinha valor nulo e, portanto, foi o único que retornou "Value not provided" .

Campos indefinidos e ausentes


Conforme mencionado, valores indefinidos e campos ausentes são tratados como valores nulos.

Suponha que adicionamos os seguintes documentos à nossa coleção:
{ "_id" : 9, "data" : undefined }
{ "_id" : 10, "name" : "Homer" }

Neste caso, o documento 9 tem undefined no campo de dados, mas o documento 10 nem tem um data campo.

Veja o que acontece quando aplicamos $ifNull a esses 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" }