MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ifNull

In MongoDB, $ifNull è un operatore della pipeline di aggregazione che consente di specificare un valore da utilizzare al posto di null .

Il modo in cui funziona è fornire un'espressione e un'espressione sostitutiva. Se l'espressione restituisce un valore non null, viene restituita tale espressione. Ma se l'espressione restituisce un valore null, $ifNull restituisce il valore dell'espressione sostitutiva.

Un valore null include istanze di valori non definiti o campi mancanti.

Esempio

Supponiamo di avere una collezione chiamata test con i seguenti documenti:

{ "_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 }

Ecco cosa succede se utilizziamo $ifNull operatore sui data campo:

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

Risultato:

{ "_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 }

Possiamo vedere che solo un campo aveva un valore nullo e quindi era l'unico a restituire "Value not provided" .

Campi non definiti e mancanti

Come accennato, i valori non definiti e i campi mancanti vengono trattati come valori nulli.

Supponiamo di aggiungere i seguenti documenti alla nostra raccolta:

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

In questo caso, il documento 9 ha undefined nel campo dati, ma il documento 10 non ha nemmeno un data campo.

Ecco cosa succede quando applichiamo $ifNull a quei documenti:

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

Risultato:

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