I MongoDB er $ln
aggregeringspipeline-operatoren beregner den naturlige logaritme (ln
) af et tal og returnerer resultatet som en fordobling.
Syntaks
Syntaksen ser sådan ud:
{ $ln: }
Hvor
Eksempel
Antag, at vi har en samling kaldet test
med følgende dokument:
{ "_id" :1, "data" :0,5 }{ "_id" :2, "data" :20 }{ "_id" :3, "data" :200 }
Vi kan bruge $ln
operatør for at returnere den naturlige logaritme af data
felt:
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}>En anden måde at gøre dette på ville have været at bruge
$log
operator med et andet argumentMath.E
. Se MongoDB$log
for et eksempel.Naturlig logaritme
Et tals naturlige logaritme er dets logaritme til bunden af den matematiske konstant e , hvor e er et irrationelt og transcendentalt tal, der starter med 2,7182818284590452353602874713527 og fortsætter for evigt.
Den matematiske konstant e er også kendt som Eulers nummer.
I JavaScript kan vi bruge
Math.E
at repræsentere e . Vi kan derfor få den naturlige logaritme af e ved at brugeMath.E
som argument ved brug af$ln
.Antag, at vi har et dokument som dette:
{ "_id" :4, "data" :2.718281828459045 }Datafeltet indeholder
e
til 15 decimaler.Dette eksempel bruger to måder at returnere den naturlige logaritme af 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ørste resultat bruger dataene fra dokumentet. Til det andet resultat bruger vi
Math.E
for at genereree
.Uanset hvad, er resultatet
1
.Værdier uden for område
Som nævnt er
$ln
operatoren accepterer ethvert gyldigt udtryk, der løses til et ikke-negativt tal. Værdier uden for dette område vil forårsage en fejl.Antag, at vi tilføjer følgende dokument til vores samling:
{ "_id" :5, "data" :-20 }Lad os køre
$ln
operatør mod dette dokument:db.test.aggregate( [ { $match:{ _id:{ $in:[ 5 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$data" ] } } } ])
Resultat:
ufanget undtagelse:Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$lns argument skal være et positivt tal, men er -20", "code" :28766, "codeName" :"Location28766 "} :aggregat mislykkedes :[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@(shell):1:1Forkert datatype
Angivelse af den forkerte datatype vil også forårsage en fejl.
Antag, at vi tilføjer følgende dokument til vores samling:
{ "_id" :6, "data" :"Ti" }Lad os køre
$ln
operatør mod dette dokument:db.test.aggregate( [ { $match:{ _id:{ $in:[ 6 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$data" ] } } } ])
Resultat:
ufanget undtagelse:Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$ln understøtter kun numeriske typer, ikke streng", "code" :28765, "codeName" :"Location28765"} :aggregeret mislykkedes :[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 har angivet en streng, så fejlmeddelelsen fortæller os, at
$ln kun understøtter numeriske typer, ikke streng
.Nul-værdier
Nul-værdier returnerer
null
når du bruger$ln
operatør.Antag, at vi tilføjer følgende dokument til vores samling:
{ "_id" :7, "data" :null }Lad os køre
$ln
operatør mod dette dokument:db.test.aggregate( [ { $match:{ _id:{ $in:[ 7 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$data" ] } } } ])
Resultat:
{ "data" :null, "result" :null }Vi kan se, at resultatet er
null
.NaN-værdier
Hvis argumentet løses til
NaN
,$ln
returnererNaN
.Eksempel:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 1 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$data" * 1 ] } } } ])
Resultat:
{ "data" :0,5, "result" :NaN }Ikke-eksisterende felter
Hvis
$ln
operator anvendes mod et felt, der ikke eksisterer,null
er returneret.Eksempel:
db.test.aggregate( [ { $match:{ _id:{ $in:[ 1 ] } } }, { $project:{ _id:0, data:1, result:{ $ln:[ "$age" ] } } } ])
Resultat:
{ "data" :0.5, "result" :null }I dette tilfælde forsøgte vi at anvende
$ln
mod et felt kaldetage
, men det felt findes ikke i dokumentet, og derfor får vinull
.