В MongoDB, $ln Операторът на конвейера за агрегиране изчислява естествения логаритъм (ln ) на число и връща резултата като двоен.
Синтаксис
Синтаксисът е така:
{ $ln: }
Където <номер>код> може да бъде всеки валиден израз, който се разрешава до неотрицателно число.
Пример
Да предположим, че имаме колекция, наречена test със следния документ:
{ "_id" :1, "data" :0,5 }{ "_id" :2, "data" :20 }{ "_id" :3, "data" :200 }
Можем да използваме $ln оператор за връщане на естествения логаритъм на данните поле:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 1, 2, 3 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $ln:[ "$data" ] } } } ]) Резултат:
{ "данни" :0,5, "резултат" :-0,6931471805599453 }{ "данни" :20, "резултат" :2,995732273553991 }{ "данни" :200, "предварителен резултат" :837 }32 96 838.
Друг начин да направите това би бил да използвате $log оператор с втори аргумент на Math.E . Вижте MongoDB $log за пример.
Естествен логаритъм
Естественият логаритъм на числото е неговият логаритъм спрямо основата на математическата константа e , където e е ирационално и трансцендентно число, което започва с 2.7182818284590452353602874713527 и продължава завинаги.
Математическата константа e е известно още като числото на Ойлер.
В JavaScript можем да използваме Math.E да представлява e . Следователно можем да получим естествения логаритъм на e с помощта на Math.E като аргумент при използване на $ln .
Да предположим, че имаме документ като този:
{ "_id" :4, "data" :2.718281828459045 }
Полето за данни съдържа e до 15 знака след десетичната запетая.
Този пример използва два начина за връщане на естествения логаритъм на e :
db.test.aggregate( [ { $match:{ _id:{ $in:[ 4 ] } } }, { $project:{ _id:0, e_1:{ $ln:[ "$data " ] }, e_2:{ $ln:[ Math.E ] } } } ])
Резултат:
{ "e_1" :1, "e_2" :1 }
Първият резултат използва данните от документа. За втория резултат използваме Math.E за генериране на e .
Така или иначе, резултатът е 1 .
Стойности извън обхвата
Както споменахме, $ln операторът приема всеки валиден израз, който се разрешава до неотрицателно число. Стойности извън този диапазон ще доведат до грешка.
Да предположим, че добавяме следния документ към нашата колекция:
{ "_id" :5, "data" :-20 }
Нека стартираме $ln оператор срещу този документ:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 5 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $ln:[ "$data" ] } } } ])
Резултат:
неуловено изключение:Грешка:командата е неуспешна:{ "ok" :0, "errmsg" :"Аргументът на $ln трябва да е положително число, но е -20", "code" :28766, "codeName" :"Location28766 "} :неуспешен агрегат :example@sqldat.com/mongo/shell/utils.js:25:13example@sqldat.com/mongo/shell/assert.js:18:14example@sqldat.com/mongo/shell/assert. js:639:17example@sqldat.com/mongo/shell/assert.js:729:16example@sqldat.com/mongo/shell/db.js:266:5example@sqldat.com/mongo/shell/collection.js:1058:12@(обвивка):1:1 Грешен тип данни
Предоставянето на грешен тип данни също ще доведе до грешка.
Да предположим, че добавяме следния документ към нашата колекция:
{ "_id" :6, "data" :"Десет" }
Нека стартираме $ln оператор срещу този документ:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 6 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $ln:[ "$data" ] } } } ])
Резултат:
неуловено изключение:Грешка:командата е неуспешна:{ "ok" :0, "errmsg" :"$ln поддържа само числови типове, а не низ", "код" :28765, "codeName" :"Location28765"} :агрегат неуспешно :example@sqldat.com/mongo/shell/utils.js:25:13example@sqldat.com/mongo/shell/assert.js:18:14example@sqldat.com/mongo/shell/assert.js:639:17example@sqldat.com/mongo/shell/assert.js:729:16example@sqldat.com/mongo/shell/db.js:266:5example@sqldat.com/mongo/shell/collection.js:1058:12@ (обвивка):1:1
Предоставихме низ и така съобщението за грешка ни казва, че $ln поддържа само числови типове, а не низ .
Нулеви стойности
Нулевите стойности връщат null когато използвате $ln оператор.
Да предположим, че добавяме следния документ към нашата колекция:
{ "_id" :7, "data" :null }
Нека стартираме $ln оператор срещу този документ:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 7 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $ln:[ "$data" ] } } } ])
Резултат:
{ "data" :null, "result" :null }
Можем да видим, че резултатът е null .
NaN стойности
Ако аргументът се разреши до NaN , $ln връща NaN .
Пример:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 1 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $ln:[ "$data" * 1 ] } } } ])
Резултат:
{ "данни" :0,5, "резултат" :NaN } Несъществуващи полета
Ако $ln операторът се прилага срещу поле, което не съществува, null се връща.
Пример:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 1 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $ln:[ "$age" ] } } } ])
Резултат:
{ "данни" :0.5, "резултат" :нула }
В този случай се опитахме да приложим $ln срещу поле, наречено age , но това поле не съществува в документа и така получаваме null .