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

MongoDB $atan2

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 }

  1. Proč byste měli stále používat úložiště MMAPv1 pro MongoDB

  2. Redis :Jak mohu třídit svůj hash podle klíčů?

  3. Jak převést pohled MongoDB na sbírku

  4. Celer umožňuje resetování připojení peerem