sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $ ln

V MongoDB, $ln Operátor agregačního potrubí vypočítá přirozený logaritmus (ln ) čísla a vrátí výsledek jako dvojnásobek.

Syntaxe

Syntaxe vypadá takto:

{ $ln: <number> } 

Kde <number> může být jakýkoli platný výraz, který se převede na nezáporné číslo.

Příklad

Předpokládejme, že máme kolekci nazvanou test s následujícím dokumentem:

{ "_id" :1, "data" :0,5 }{ "_id" :2, "data" :20 }{ "_id" :3, "data" :200 }

Můžeme použít $ln operátor vrátí přirozený logaritmus data pole:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 1, 2, 3 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" ] }
        }
    }
  ]
) 

Výsledek:

{ "data" :0,5, "výsledek" :-0,6931471805599453 }{ "data" :20, "výsledek" :2,995732273553991 }{ "data" :200, "výsledek" :3 645>3608 

Jiný způsob, jak to udělat, by bylo použít $log operátor s druhým argumentem Math.E . Viz MongoDB $log pro příklad.

Přirozený logaritmus

Přirozený logaritmus čísla je jeho logaritmus k základně matematické konstanty e , kde e je iracionální a transcendentální číslo, které začíná 2,7182818284590452353602874713527 a pokračuje navždy.

Matematická konstanta e je také známé jako Eulerovo číslo.

V JavaScriptu můžeme použít Math.E reprezentovat e . Můžeme tedy získat přirozený logaritmus e pomocí Math.E jako argument při použití $ln .

Předpokládejme, že máme dokument jako tento:

{ "_id" :4, "data" :2,718281828459045 }

Datové pole obsahuje e na 15 desetinných míst.

Tento příklad používá dva způsoby, jak vrátit přirozený logaritmus e :

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 4 ] } } },
    {
      $project:
        { 
          _id: 0,
          e_1: { $ln: [ "$data" ] },
          e_2: { $ln: [ Math.E ] }
        }
    }
  ]
) 

Výsledek:

{ "e_1" :1, "e_2" :1 }

První výsledek využívá data z dokumentu. Pro druhý výsledek použijeme Math.E vygenerovat e .

V obou případech je výsledkem 1 .

Hodnoty mimo rozsah

Jak již bylo zmíněno, $ln operátor přijímá jakýkoli platný výraz, který se překládá na nezáporné číslo. Hodnoty mimo tento rozsah způsobí chybu.

Předpokládejme, že do naší sbírky přidáme následující dokument:

{ "_id" :5, "data" :-20 }

Spusťte $ln operátor proti tomuto dokumentu:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 5 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" ] }
        }
    }
  ]
) 

Výsledek:

nezachycená výjimka:Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"Argument $ln musí být kladné číslo, ale je -20", "code" :28766, "codeName" :"Umístění28766 "} :agregace selhala :[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

Nesprávný datový typ

Chybu také způsobí zadání nesprávného typu dat.

Předpokládejme, že do naší sbírky přidáme následující dokument:

{ "_id" :6, "data" :"Ten" }

Spusťte $ln operátor proti tomuto dokumentu:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 6 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" ] }
        }
    }
  ]
) 

Výsledek:

nezachycená výjimka:Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"$ln podporuje pouze číselné typy, nikoli řetězec", "code" :28765, "codeName" :"Location28765"} :agregace selhalo :[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

Poskytli jsme řetězec, a tak nám chybová zpráva říká, že $ln only supports numeric types, not string .

Nulové hodnoty

Hodnoty Null vrátí null při použití $ln operátor.

Předpokládejme, že do naší sbírky přidáme následující dokument:

{ "_id" :7, "data" :null }

Spusťte $ln operátor proti tomuto dokumentu:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 7 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" ] }
        }
    }
  ]
) 

Výsledek:

{ "data" :null, "result" :null }

Vidíme, že výsledek je null .

Hodnoty NaN

Pokud je argument vyřešen na NaN$ln vrátí NaN .

Příklad:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 1 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" * 1 ] }
        }
    }
  ]
) 

Výsledek:

{ "data" :0,5, "výsledek" :NaN }

Neexistující pole

Pokud $ln operátor se použije na pole, které neexistuje, null je vráceno.

Příklad:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 1 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$age" ] }
        }
    }
  ]
) 

Výsledek:

{ "data" :0,5, "result" :null }

V tomto případě jsme zkusili použít $ln proti poli s názvem age , ale toto pole v dokumentu neexistuje, a tak dostaneme null .


  1. Instalace a konfigurace Redis na Ubuntu

  2. Jaká uživatelská oprávnění MongoDB potřebuji k přidání uživatele do nové/jiné mongo databáze?

  3. Aktualizace slovníku v Mongodb

  4. Vrací hodnotu z asynchronní funkce node.js