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 argument Math.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 bruge Math.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 generere e .
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 :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@(shell):1:1 Forkert 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 :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 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 returnerer NaN .
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 kaldet age , men det felt findes ikke i dokumentet, og derfor får vi null .