sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $ln

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 kan vara vilket giltigt uttryck som helst som löser sig till ett icke-negativt tal.

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

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


  1. MongoDB fråga $in med regex array av element

  2. Några detaljerade och specifika skäl till varför MongoDB är mycket snabbare än SQL DB?

  3. MongoDBs växande betydelse inom datavetenskapsområdet

  4. Erhålla $gruppresultat med gruppantal