В MongoDB, $degreesToRadians
Операторът на конвейера за агрегиране преобразува входна стойност, измерена в градуси, в радиани.
$degreesToRadians
приема всеки валиден израз, който се разрешава до число.
$degreesToRadians
операторът беше въведен в MongoDB 4.2.
Пример
Да предположим, че имаме колекция, наречена test
със следния документ:
{ "_id" :1, "data" :180 }
И нека приемем, че стойността на data
полето е в градуси (следователно в този случай е 180
градуса).
Можем да използваме $degreesToRadians
оператор за преобразуване на данните
поле в радиани:
db.test.aggregate( [ { $match:{ _id:1 } }, { $project:{ _id:0, градуси:"$data", радиани:{ $degreesToRadians:"$data" } } } ])
Резултат:
{ "градуси" :180, "радиани" :3,141592653589793 }
По подразбиране $degreesToRadians
операторът връща стойности като double
, но може също да връща стойности като 128-битова десетична стойност, стига изразът да се разреши до 128-битова десетична стойност.
128-битови десетични стойности
Ако изразът, предоставен на $degreesToRadians
е 128-битов десетичен знак, след което резултатът се връща в 128-битов десетичен знак.
Да предположим, че добавяме следния документ към нашата колекция:
{ "_id" :2, "data" :NumberDecimal("0.1301023541559787031443874490659") }
Нека стартираме $degreesToRadians
оператор срещу този документ:
db.test.aggregate( [ { $match:{ _id:2 } }, { $project:{ _id:0, градуси:"$data", радиани:{ $degreesToRadians:"$data" } } } ]).pretty()
Резултат:
{ "градуси" :NumberDecimal("90.1301023541559787031443874490659"), "radians" :NumberDecimal("1.57306704123951417589027804740")56Изходът е 128-битов десетичен.
Нулеви стойности
Нулевите стойности връщат
null
когато използвате$degreesToRadians
оператор.Да предположим, че добавяме следния документ към нашата колекция:
{ "_id" :3, "data" :null }Нека стартираме
$degreesToRadians
оператор срещу този документ:db.test.aggregate( [ { $match:{ _id:3 } }, { $project:{ _id:0, радиани:{ $degreesToRadians:"$data" } } } ])код>
Резултат:
{ "radians" :null }Можем да видим, че резултатът е
null
.NaN стойности
Ако аргументът се разреши до
NaN
,$degreesToRadians
връщаNaN
.Пример:
db.test.aggregate( [ { $match:{ _id:3 } }, { $project:{ _id:0, радиани:{ $degreesToRadians:0 * "$data" } } } ])
Резултат:
{ "радиани" :NaN }Безкрайност
Ако аргументът се разреши до
Безкрайност
или-Infinity
,$degreesToRadians
операторът връщаInfinity
.Да предположим, че добавяме следния документ към нашата колекция:
{ "_id" :4, "data" :Безкрайност }Нека изпълним
$degreesToRadians
срещу полето за данни:db.test.aggregate( [ { $match:{ _id:4 } }, { $project:{ _id:0, радиани:{ $degreesToRadians:"$data" } } } ])код>
Резултат:
{ "radians" :Безкрайност }Несъществуващи полета
Ако
$degreesToRadians
операторът се прилага срещу поле, което не съществува,null
се връща.Пример:
db.test.aggregate( [ { $match:{ _id:4 } }, { $project:{ _id:0, радиани:{ $degreesToRadians:"$name" } } } ])код>
Резултат:
{ "radians" :null }Комбинирано с други оператори
Някои оператори на тръбопроводи за агрегиране приемат изразите си в радиани. Ако полето има стойност в градуси, можете да комбинирате
$degreesToRadians
за да преобразувате израза в радиани.Да предположим, че имаме колекция, наречена
test
със следния документ:{ "_id" :1, "data" :3 }И в този случай стойността на полето с данни е в градуси.
Да предположим, че искаме да използваме
$cosh
оператор за връщане на хиперболичния косинус наданните
поле. Единственият проблем е, че$cosh
операторът приема изрази в радиани.Няма проблем! Можем да използваме
$degreesToRadians
за да преобразувате входния израз в радиани.Пример:
db.test.aggregate( [ { $match:{ _id:1 } }, { $project:{ _id:0, hyperbolicCosine:{ $degreesToRadians:{ $cosh:"$data" } } } } ])
Резултат:
{ "hyperbolicCosine" :0,17571384980422547 }