W MongoDB $degreesToRadians
Operator potoku agregacji konwertuje wartość wejściową mierzoną w stopniach na radiany.
$degreesToRadians
akceptuje każde prawidłowe wyrażenie, które prowadzi do liczby.
$degreesToRadians
operator został wprowadzony w MongoDB 4.2.
Przykład
Załóżmy, że mamy kolekcję o nazwie test
z następującym dokumentem:
{ "_id" : 1, "data" : 180 }
I załóżmy, że wartość data
pole jest w stopniach (dlatego w tym przypadku jest to 180
stopni).
Możemy użyć $degreesToRadians
operator do konwersji data
pole do radianów:
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
degrees: "$data",
radians: { $degreesToRadians: "$data" }
}
}
]
)
Wynik:
{ "degrees" : 180, "radians" : 3.141592653589793 }
Domyślnie $degreesToRadians
operator zwraca wartości jako double
, ale może również zwracać wartości jako 128-bitowe wartości dziesiętne, o ile wyrażenie daje wynik 128-bitowej wartości dziesiętnej.
128-bitowe wartości dziesiętne
Jeśli wyrażenie dostarczone do $degreesToRadians
jest 128-bitowy dziesiętny, to wynik jest zwracany w 128-bitowym dziesiętnym.
Załóżmy, że do naszej kolekcji dodamy następujący dokument:
{ "_id" : 2, "data" : NumberDecimal("0.1301023541559787031443874490659") }
Uruchommy $degreesToRadians
operatora względem tego dokumentu:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
degrees: "$data",
radians: { $degreesToRadians: "$data" }
}
}
]
).pretty()
Wynik:
{ "degrees" : NumberDecimal("90.1301023541559787031443874490659"), "radians" : NumberDecimal("1.573067041239514175890278047405623") }
Dane wyjściowe są 128-bitowe po przecinku.
Wartości puste
Wartości null zwracają null
podczas korzystania z $degreesToRadians
operatora.
Załóżmy, że do naszej kolekcji dodamy następujący dokument:
{ "_id" : 3, "data" : null }
Uruchommy $degreesToRadians
operatora względem tego dokumentu:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: "$data" }
}
}
]
)
Wynik:
{ "radians" : null }
Widzimy, że wynikiem jest null
.
Wartości NaN
Jeśli argument ma postać NaN
, $degreesToRadians
zwraca NaN
.
Przykład:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: 0 * "$data" }
}
}
]
)
Wynik:
{ "radians" : NaN }
Nieskończoność
Jeśli argument kończy się na Infinity
lub -Infinity
, $degreesToRadians
operator zwraca Infinity
.
Załóżmy, że do naszej kolekcji dodamy następujący dokument:
{ "_id" : 4, "data" : Infinity }
Uruchommy $degreesToRadians
względem pola danych:
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: "$data" }
}
}
]
)
Wynik:
{ "radians" : Infinity }
Nieistniejące pola
Jeśli $degreesToRadians
operator jest stosowany do pola, które nie istnieje, null
jest zwracany.
Przykład:
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: "$name" }
}
}
]
)
Wynik:
{ "radians" : null }
W połączeniu z innymi operatorami
Niektóre operatory potoku agregacji akceptują swoje wyrażenia w radianach. Jeśli pole ma wartość w stopniach, możesz połączyć $degreesToRadians
aby przekonwertować wyrażenie na radiany.
Załóżmy, że mamy kolekcję o nazwie test
z następującym dokumentem:
{ "_id" : 1, "data" : 3 }
W tym przypadku wartość pola danych jest wyrażona w stopniach.
Załóżmy teraz, że chcemy użyć $cosh
operator zwracający cosinus hiperboliczny data
pole. Jedynym problemem jest to, że $cosh
operator akceptuje wyrażenia w radianach.
Nie ma problemu! Możemy użyć $degreesToRadians
aby przekonwertować wyrażenie wejściowe na radiany.
Przykład:
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
hyperbolicCosine: { $degreesToRadians: { $cosh: "$data" } }
}
}
]
)
Wynik:
{ "hyperbolicCosine" : 0.17571384980422547 }