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

MongoDB $degreesToRadians

In MongoDB die $degreesToRadians Aggregation Pipeline Operator wandelt einen in Grad gemessenen Eingabewert in Radiant um.

$degreesToRadians akzeptiert jeden gültigen Ausdruck, der in eine Zahl aufgelöst wird.

Die $degreesToRadians -Operator wurde in MongoDB 4.2 eingeführt.

Beispiel

Angenommen, wir haben eine Sammlung namens test mit folgendem Dokument:

{ "_id" : 1, "data" : 180 }

Und nehmen wir an, dass der Wert der data Feld ist in Grad (also in diesem Fall 180). Grad).

Wir können die $degreesToRadians verwenden Operator zum Konvertieren der data Feld in Radiant:

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        degrees: "$data",
        radians: { $degreesToRadians: "$data" }
      }
    }
  ]
)

Ergebnis:

{ "degrees" : 180, "radians" : 3.141592653589793 }

Standardmäßig die $degreesToRadians -Operator gibt Werte als double zurück , aber es kann auch Werte als 128-Bit-Dezimalwert zurückgeben, solange der Ausdruck in einen 128-Bit-Dezimalwert aufgelöst wird.

128-Bit-Dezimalwerte

Wenn der Ausdruck für $degreesToRadians bereitgestellt wird 128-Bit-Dezimalzahl ist, wird das Ergebnis in 128-Bit-Dezimalzahl zurückgegeben.

Angenommen, wir fügen unserer Sammlung das folgende Dokument hinzu:

{ "_id" : 2, "data" : NumberDecimal("0.1301023541559787031443874490659") }

Lassen Sie uns die $degreesToRadians ausführen Operator gegen dieses Dokument:

db.test.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        degrees: "$data",
        radians: { $degreesToRadians: "$data" }
      }
    }
  ]
).pretty()

Ergebnis:

{
	"degrees" : NumberDecimal("90.1301023541559787031443874490659"),
	"radians" : NumberDecimal("1.573067041239514175890278047405623")
}

Die Ausgabe ist 128-Bit dezimal.

Nullwerte

Nullwerte geben null zurück bei Verwendung von $degreesToRadians Betreiber.

Angenommen, wir fügen unserer Sammlung das folgende Dokument hinzu:

{ "_id" : 3, "data" : null }

Lassen Sie uns die $degreesToRadians ausführen Operator gegen dieses Dokument:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        radians: { $degreesToRadians: "$data" }
      }
    }
  ]
)

Ergebnis:

{ "radians" : null }

Wir können sehen, dass das Ergebnis null ist .

NaN-Werte

Wenn das Argument zu NaN aufgelöst wird , $degreesToRadians gibt NaN zurück .

Beispiel:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        radians: { $degreesToRadians: 0 * "$data" }
      }
    }
  ]
)

Ergebnis:

{ "radians" : NaN }

Unendlich

Wenn das Argument zu Infinity aufgelöst wird oder -Infinity , die $degreesToRadians Operator gibt Infinity zurück .

Angenommen, wir fügen unserer Sammlung das folgende Dokument hinzu:

{ "_id" : 4, "data" : Infinity }

Lassen Sie uns $degreesToRadians ausführen gegen das Datenfeld:

db.test.aggregate(
  [
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        radians: { $degreesToRadians: "$data" }
      }
    }
  ]
)

Ergebnis:

{ "radians" : Infinity }

Nicht vorhandene Felder

Wenn die $degreesToRadians -Operator wird auf ein nicht vorhandenes Feld angewendet, null zurückgegeben wird.

Beispiel:

db.test.aggregate(
  [
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        radians: { $degreesToRadians: "$name" }
      }
    }
  ]
)

Ergebnis:

{ "radians" : null }

Kombiniert mit anderen Operatoren

Einige Betreiber von Aggregationspipelines akzeptieren ihre Ausdrücke im Bogenmaß. Wenn ein Feld seinen Wert in Grad hat, können Sie $degreesToRadians kombinieren um den Ausdruck in Radiant umzuwandeln.

Angenommen, wir haben eine Sammlung namens test mit folgendem Dokument:

{ "_id" : 1, "data" : 3 }

Und in diesem Fall ist der Wert des Datenfelds in Grad angegeben.

Angenommen, wir möchten $cosh verwenden -Operator, um den hyperbolischen Kosinus der data zurückzugeben Feld. Das einzige Problem ist, dass der $cosh Operator akzeptiert Ausdrücke im Bogenmaß.

Kein Problem! Wir können $degreesToRadians verwenden um den Eingabeausdruck in Radiant umzuwandeln.

Beispiel:

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        hyperbolicCosine: { $degreesToRadians: { $cosh: "$data" } }
      }
    }
  ]
)

Ergebnis:

{ "hyperbolicCosine" : 0.17571384980422547 }