MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $ifNull

In MongoDB $ifNull ist ein Aggregations-Pipeline-Operator, mit dem Sie einen Wert angeben können, der anstelle von null verwendet werden soll .

Es funktioniert so, dass Sie einen Ausdruck und einen Ersatzausdruck angeben. Wenn der Ausdruck zu einem Nicht-Null-Wert ausgewertet wird, wird dieser Ausdruck zurückgegeben. Aber wenn der Ausdruck zu einem Nullwert ausgewertet wird, $ifNull gibt den Wert des Ersetzungsausdrucks zurück.

Ein Nullwert enthält Instanzen von undefinierten Werten oder fehlenden Feldern.

Beispiel

Angenommen, wir haben eine Sammlung namens test mit folgenden Dokumenten:

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

Folgendes passiert, wenn wir $ifNull verwenden Operator auf die data Feld:

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

Ergebnis:

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

Wir können sehen, dass nur ein Feld einen Nullwert hatte und daher das einzige war, das "Value not provided" zurückgab .

Undefinierte und fehlende Felder

Wie bereits erwähnt, werden undefinierte Werte und fehlende Felder als Nullwerte behandelt.

Angenommen, wir fügen unserer Sammlung die folgenden Dokumente hinzu:

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

In diesem Fall hat Dokument 9 undefined im Datenfeld, aber Dokument 10 hat nicht einmal data Feld.

Folgendes passiert, wenn wir $ifNull anwenden zu diesen Dokumenten:

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

Ergebnis:

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