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}>17369
Ett annat sätt att göra detta skulle ha varit att använda $log operator med ett andra argument Math.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ända Math.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 generera e .
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 :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@(skal):1:1 Fel 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 :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@ (skal):1:1
Vi 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 returnerar NaN .
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år null .