V MongoDB, $log Operátor agregačního kanálu vypočítá logaritmus čísla v zadaném základu a vrátí výsledek jako dvojnásobek.
Syntaxe
Syntaxe vypadá takto:
{ $log: [ <number>, <base> ] } Kde:
<number>může být jakýkoli platný výraz, který se převádí na nezáporné číslo.<base>může být jakýkoli platný výraz, který se převede na kladné číslo větší než1.
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 $log operátor vrátí logovací základ 10 data pole:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $log: [ "$data", 10 ] }
}
}
]
) Výsledek:
{ "data" :0,5, "výsledek" :-0,30102999566398114 }{ "data" :20, "výsledek" :1,301029995663981 }{ "data" :200, "výsledek" 185962,03
Jiný způsob, jak to udělat, by bylo použít $log10 operátor.
Nicméně $log10 vrátí pouze log základ 10 čísla. S $log , na druhou stranu můžeme určit základ, který se má použít.
Zde je příklad zadání základu 16:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $log: [ "$data", 16 ] }
}
}
]
)
Výsledek:
{ "data" :0,5, "výsledek" :-0,25 }{ "data" :20, "výsledek" :1,0804820237218407 }{ "data" :200, "výsledek" :1,910964047443681 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 čísla pomocí Math.E jako druhý argument při použití $log .
Příklad:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $log: [ "$data", Math.E ] }
}
}
]
)
Výsledek:
{ "data" :0,5, "výsledek" :-0,6931471805599453 }{ "data" :20, "výsledek" :2,995732273553991 }{ "data" :200, "výsledek" :3 645>36088
Mějte na paměti, že MongoDB má také $ln operátor, který je speciálně navržen tak, aby vrátil přirozený logaritmus čísla, takže může být snazší použít tento operátor. Viz MongoDB $ln pro příklad.
Hodnoty mimo rozsah
Jak již bylo zmíněno, $log 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" :4, "data" :-20 }
Spusťte $log operátor proti tomuto dokumentu:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 4 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $log: [ "$data", 16 ] }
}
}
]
)
Výsledek:
nezachycená výjimka:Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"Argument $log musí být kladné číslo, ale je -20", "code" :28758, "codeName" :"Location28758 "} :agregace selhala :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 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" :5, "data" :"Deset" }
Spusťte $log operátor proti tomuto dokumentu:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 5 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $log: [ "$data", 16 ] }
}
}
]
)
Výsledek:
nezachycená výjimka:Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"argument $logu musí být číselný, nikoli řetězec", "code" :28756, "codeName" :"Location28756"} :agregace selhalo :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
Zadali jsme řetězec, a tak nám chybová zpráva říká, že $log's argument must be numeric, not string .
Nulové hodnoty
Hodnoty Null vrátí null při použití $log operátor.
Předpokládejme, že do naší sbírky přidáme následující dokument:
{ "_id" :6, "data" :null }
Spusťte $log operátor proti tomuto dokumentu:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 6 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $log: [ "$data", 16 ] }
}
}
]
)
Výsledek:
{ "data" :null, "result" :null }
Vidíme, že výsledek je null .
Hodnoty NaN
Pokud je argument vyřešen na NaN , $log vrátí NaN .
Příklad:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $log: [ "$data" * 1, 16 ] }
}
}
]
)
Výsledek:
{ "data" :0,5, "výsledek" :NaN } Neexistující pole
Pokud $log 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: { $log: [ "$age", 16 ] }
}
}
]
)
Výsledek:
{ "data" :0,5, "result" :null }
V tomto případě jsme zkusili použít $log proti poli s názvem age , ale toto pole v dokumentu neexistuje, a tak dostaneme null .