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 }