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

MongoDB $ifNull

I MongoDB, $ifNull er en aggregeringspipeline-operatør, der giver dig mulighed for at angive en værdi, der skal bruges i stedet for null .

Den måde, det fungerer på, er, at du giver et udtryk og et erstatningsudtryk. Hvis udtrykket evalueres til en værdi, der ikke er nul, returneres dette udtryk. Men hvis udtrykket evalueres til en nulværdi, $ifNull returnerer værdien af ​​erstatningsudtrykket.

En null-værdi inkluderer forekomster af udefinerede værdier eller manglende felter.

Eksempel

Antag, at vi har en samling kaldet test med følgende dokumenter:

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

Her er, hvad der sker, hvis vi bruger $ifNull operatør på data felt:

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

Resultat:

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

Vi kan se, at kun ét felt havde en nulværdi, og derfor var det det eneste, der returnerede "Value not provided" .

Udefinerede og manglende felter

Som nævnt behandles udefinerede værdier og manglende felter som nulværdier.

Antag, at vi føjer følgende dokumenter til vores samling:

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

I dette tilfælde har dokument 9 undefined i datafeltet, men dokument 10 har ikke engang en data felt.

Her er, hvad der sker, når vi anvender $ifNull til disse dokumenter:

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

Resultat:

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

  1. Hvordan skal jeg gemme et array i redis?

  2. MongoDB $millisekund

  3. Redis eller Mongo for at afgøre, om et tal falder inden for intervaller?

  4. Få seneste MongoDB-rekord efter felt af dato og klokkeslæt