sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $ifNull

I MongoDB, $ifNull är en aggregationspipeline-operator som låter dig ange ett värde som ska användas istället för null .

Det sätt som det fungerar är att du tillhandahåller ett uttryck och ett ersättningsuttryck. Om uttrycket utvärderas till ett icke-nullvärde, returneras det uttrycket. Men om uttrycket utvärderas till ett nullvärde, $ifNull returnerar värdet för ersättningsuttrycket.

Ett nollvärde inkluderar instanser av odefinierade värden eller saknade fält.

Exempel

Anta att vi har en samling som heter test med följande dokument:

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

Här är vad som händer om vi använder $ifNull operatorn på data fält:

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 att endast ett fält hade ett nollvärde och därför var det det enda som returnerade "Value not provided" .

Odefinierade och saknade fält

Som nämnts behandlas odefinierade värden och saknade fält som nollvärden.

Anta att vi lägger till följande dokument i vår samling:

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

I det här fallet har dokument 9 undefined i datafältet, men dokument 10 har inte ens en data fältet.

Det här är vad som händer när vi tillämpar $ifNull till dessa dokument:

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. Inbäddat dokument kontra referens i mongoose designmodell?

  2. Är det möjligt att ha en Linux VFS-cache med ett FUSE-filsystem?

  3. MongoDB Index Builds – Förhindrar användare från att utlösa nya byggnader

  4. Hur man skapar användare i mongodb med docker-compose