sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ifNull

In MongoDB, $ifNull is een aggregatiepijplijnoperator waarmee u een waarde kunt opgeven die moet worden gebruikt in plaats van null .

De manier waarop het werkt, is dat u een uitdrukking en een vervangende uitdrukking opgeeft. Als de expressie resulteert in een niet-null-waarde, wordt die expressie geretourneerd. Maar als de uitdrukking resulteert in een null-waarde, $ifNull geeft de waarde van de vervangende uitdrukking terug.

Een null-waarde omvat instanties van ongedefinieerde waarden of ontbrekende velden.

Voorbeeld

Stel dat we een verzameling hebben met de naam test met de volgende documenten:

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

Dit is wat er gebeurt als we de $ifNull . gebruiken operator op de data veld:

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

Resultaat:

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

We kunnen zien dat slechts één veld een null-waarde had en daarom was dit het enige veld dat "Value not provided" retourneerde .

Ongedefinieerde en ontbrekende velden

Zoals vermeld, worden ongedefinieerde waarden en ontbrekende velden behandeld als null-waarden.

Stel dat we de volgende documenten aan onze collectie toevoegen:

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

In dit geval heeft document 9 undefined in het dataveld, maar document 10 heeft niet eens een data veld.

Dit is wat er gebeurt als we $ifNull toepassen naar die documenten:

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

Resultaat:

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

  1. MongoDB $mul

  2. MongoDB $eq Aggregation Pipeline Operator

  3. Hoe kan ik de grootte van een redis-onderwerp (subset van sleutels) vinden?

  4. Redis Cluster vs ZeroMQ in Pub/Sub, voor horizontaal geschaalde gedistribueerde systemen