V MongoDB, $atan2
Operátor agregačního potrubí vrací arkustangens (inverzní tangens) jedné hodnoty dělený druhou.
Zadáte dvě hodnoty v poli. Každá ze dvou hodnot poskytnutých $atan2
může být jakýkoli platný výraz, který se překládá na číslo.
Návratová hodnota je v radiánech.
$atan2
operátor byl představen v MongoDB 4.2.
Příklad
Předpokládejme, že máme kolekci nazvanou data
s následujícím dokumentem:
{ "_id" : 1, "a" : 2, "b" : 3 }
Můžeme použít $atan2
operátor vrátí arkustangens a
pole děleno b
pole:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
arctangent: { $atan2: [ "$a", "$b" ] }
}
}
]
)
Výsledek:
{ "arctangent" : 0.5880026035475675 }
Převést na stupně
Jak již bylo zmíněno, $atan2
vrátí výsledek v radiánech. Můžete použít $radiansToDegrees
operátor, pokud chcete výsledek ve stupních.
Příklad:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
radians: { $atan2: [ "$a", "$b" ] },
degrees: { $radiansToDegrees: { $atan2: [ "$a", "$b" ] } }
}
}
]
)
Výsledek:
{ "radians" : 0.5880026035475675, "degrees" : 33.690067525979785 }
V tomto příkladu první pole představuje výsledek v radiánech a druhé pole jej zobrazuje ve stupních.
128bitové desetinné hodnoty
Ve výchozím nastavení $atan2
operátor vrátí hodnoty jako double
, ale může také vracet hodnoty jako 128bitové desítkové číslo, pokud se výraz převede na 128bitovou desítkovou hodnotu.
To je případ, i když pouze jeden z výrazů je 128bitový desítkový.
Předpokládejme, že do naší sbírky přidáme následující dokumenty:
{ "_id" : 2, "a" : NumberDecimal("1.1301023541559787031443874490659"), "b" : NumberDecimal("2.1301023541559787031443874490659") }
{ "_id" : 3, "a" : 2, "b" : NumberDecimal("2.1301023541559787031443874490659") }
{ "_id" : 4, "a" : NumberDecimal("2.1301023541559787031443874490659"), "b" : 2 }
Spusťte soubor $atan2
operátora proti těmto dokumentům:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 2, 3, 4 ] } } },
{ $project: {
_id: 0,
arctangent: { $atan2: [ "$a", "$b" ] }
}
}
]
)
Výsledek:
{ "arctangent" : NumberDecimal("0.4877792766738730791507215461936449") } { "arctangent" : NumberDecimal("0.7539075768401526572881006364456838") } { "arctangent" : NumberDecimal("0.8168887499547439619432210551940676") }
Ve všech případech je výstup 128bitový dekadický.
Nulové hodnoty
Hodnoty Null vrátí null
při použití $atan2
operátor. To platí i v případě, že jediný z výrazů je null
.
Předpokládejme, že do naší sbírky přidáme následující dokumenty:
{ "_id" : 5, "a" : null, "b" : 2 } { "_id" : 6, "a" : 2, "b" : null } { "_id" : 7, "a" : 2, "null" : null }
Spusťte soubor $atan2
operátora proti těmto dokumentům:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 5, 6, 7 ] } } },
{ $project: {
_id: 0,
arctangent: { $atan2: [ "$a", "$b" ] }
}
}
]
)
Výsledek:
{ "arctangent" : null } { "arctangent" : null } { "arctangent" : null }
Vidíme, že výsledek je null
ve všech případech.
Hodnoty NaN
Pokud je argument vyřešen na NaN
, $atan2
vrátí NaN
.
Příklad:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 2, 3, 4 ] } } },
{ $project: {
_id: 0,
arctangent: { $atan2: [ "$a" * 1, "$b" ] }
}
}
]
)
Výsledek:
{ "arctangent" : NumberDecimal("NaN") } { "arctangent" : NumberDecimal("NaN") } { "arctangent" : NaN }
Mírně to změníme, abychom vynásobili pole b
místo pole a
.
db.data.aggregate(
[
{ $match: { _id: { $in: [ 2, 3, 4 ] } } },
{ $project: {
_id: 0,
arctangent: { $atan2: [ "$a", "$b" * 1 ] }
}
}
]
)
Výsledek:
{ "arctangent" : NumberDecimal("NaN") } { "arctangent" : NaN } { "arctangent" : NumberDecimal("NaN") }
A nyní vynásobme obě pole:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 2, 3, 4 ] } } },
{ $project: {
_id: 0,
arctangent: { $atan2: [ "$a" * 1, "$b" * 1 ] }
}
}
]
)
Výsledek:
{ "arctangent" : NaN } { "arctangent" : NaN } { "arctangent" : NaN }
Neexistující pole
Pokud $atan2
operátor se použije na pole, které neexistuje, null
je vráceno.
Příklad:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
result: { $atan2: [ "$a", "$name" ] }
}
}
]
)
Výsledek:
{ "result" : null }