sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $ln

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 kan være et hvilket som helst gyldigt udtryk, der løses til et ikke-negativt tal.

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 :[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: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 :[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: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 .


  1. mange til mange forhold til nosql (mongodb og mongoose)

  2. Luk mongooses forbindelse korrekt, når du er færdig

  3. Redis indtastede transaktioner

  4. Tips til administration af dine databasekonfigurationer