I MongoDB, $ln
aggregeringspipeline-operatören beräknar den naturliga logaritmen (ln
) av ett tal och returnerar resultatet som en dubbel.
Syntax
Syntaxen ser ut så här:
{ $ln: }
Där
Exempel
Anta att vi har en samling som heter test
med följande dokument:
{ "_id" :1, "data" :0,5 }{ "_id" :2, "data" :20 }{ "_id" :3, "data" :200 }
Vi kan använda $ln
operatorn för att returnera den naturliga logaritmen för data
fält:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 1, 2, 3 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$data" ] } } } ])
Resultat:
{ "data" :0,5, "result" :-0,6931471805599453 }{ "data" :20, "result" :2,995732273553991 }{ "data" :200, "result" :31736685}>17369Ett annat sätt att göra detta skulle ha varit att använda
$log
operator med ett andra argumentMath.E
. Se MongoDB$log
till exempel.Naturlig logaritm
Den naturliga logaritmen för ett tal är dess logaritm till basen av den matematiska konstanten e , där e är ett irrationellt och transcendentalt tal som börjar med 2,7182818284590452353602874713527 och fortsätter för evigt.
Den matematiska konstanten e är också känt som Eulers nummer.
I JavaScript kan vi använda
Math.E
att representera e . Vi kan därför få den naturliga logaritmen för e genom att användaMath.E
som argument när du använder$ln
.Anta att vi har ett dokument som detta:
{ "_id" :4, "data" :2.718281828459045 }Datafältet innehåller
e
till 15 decimaler.Det här exemplet använder två sätt att returnera den naturliga logaritmen för e :
db.test.aggregate( [ { $match:{ _id:{ $in:[ 4 ] } } }, { $project:{ _id:0, e_1:{ $ln:[ "$data " ] }, e_2:{ $ln:[ Math.E ] } } } ])
Resultat:
{ "e_1" :1, "e_2" :1 }Det första resultatet använder data från dokumentet. För det andra resultatet använder vi
Math.E
för att genererae
.Hur som helst, resultatet är
1
.Värden utanför intervallet
Som nämnts,
$ln
operatorn accepterar alla giltiga uttryck som löser sig till ett icke-negativt tal. Värden utanför det intervallet kommer att orsaka ett fel.Anta att vi lägger till följande dokument i vår samling:
{ "_id" :5, "data" :-20 }Låt oss köra
$ln
operatör mot det dokumentet:db.test.aggregate( [ { $match:{ _id:{ $in:[ 5 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$data" ] } } } ])
Resultat:
oupptäckt undantag:Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$lns argument måste vara ett positivt tal, men är -20", "code" :28766, "codeName" :"Location28766 "} :aggregat misslyckades :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert. js:639:[email protected]/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12@(skal):1:1Fel datatyp
Att ange fel datatyp kommer också att orsaka ett fel.
Anta att vi lägger till följande dokument i vår samling:
{ "_id" :6, "data" :"Tio" }Låt oss köra
$ln
operatör mot det dokumentet:db.test.aggregate( [ { $match:{ _id:{ $in:[ 6 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$data" ] } } } ])
Resultat:
oupptäckt undantag:Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$ln stöder endast numeriska typer, inte sträng", "code" :28765, "codeName" :"Location28765"} :aggregerad misslyckades :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:639:[email protected]/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12@ (skal):1:1Vi angav en sträng, så felmeddelandet talar om för oss att
$ln endast stöder numeriska typer, inte sträng
.Nullvärden
Nullvärden returnerar
null
när du använder$ln
operatör.Anta att vi lägger till följande dokument i vår samling:
{ "_id" :7, "data" :null }Låt oss köra
$ln
operatör mot det dokumentet:db.test.aggregate( [ { $match:{ _id:{ $in:[ 7 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$data" ] } } } ])
Resultat:
{ "data" :null, "result" :null }Vi kan se att resultatet är
null
.NaN-värden
Om argumentet löser sig till
NaN
,$ln
returnerarNaN
.Exempel:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 1 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$data" * 1 ] } } } ])
Resultat:
{ "data" :0,5, "result" :NaN }Icke-existerande fält
Om
$ln
operatorn tillämpas mot ett fält som inte finns,null
returneras.Exempel:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 1 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$age" ] } } } ])
Resultat:
{ "data" :0.5, "result" :null }I det här fallet försökte vi använda
$ln
mot ett fält som heterålder
, men det fältet finns inte i dokumentet, så vi fårnull
.