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 }