MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $atan2

В MongoDB, $atan2 Операторът на конвейера за агрегиране връща арктангенса (обратната допирателна) на една стойност, разделена на друга.

Вие предоставяте двете стойности в масив. Всяка от двете стойности, предоставени на $atan2 може да бъде всеки валиден израз, който се разрешава до число.

Връщаната стойност е в радиани.

$atan2 операторът беше въведен в MongoDB 4.2.

Пример

Да предположим, че имаме колекция, наречена data със следния документ:

{ "_id" : 1, "a" : 2, "b" : 3 }

Можем да използваме $atan2 оператор за връщане на арктангенса на a поле разделено на b поле:

db.data.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a", "$b" ] }
      }
    }
  ]
)

Резултат:

{ "arctangent" : 0.5880026035475675 }

Преобразуване в градуси

Както споменахме, $atan2 връща резултата си в радиани. Можете да използвате $radiansToDegrees оператор, ако искате резултатът в градуси.

Пример:

db.data.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        radians: { $atan2: [ "$a", "$b" ] },
        degrees: { $radiansToDegrees: { $atan2: [ "$a", "$b" ] } }
      }
    }
  ]
)

Резултат:

{ "radians" : 0.5880026035475675, "degrees" : 33.690067525979785 }

В този пример първото поле представя резултата в радиани, а второто поле го представя в градуси.

128-битови десетични стойности

По подразбиране $atan2 операторът връща стойности като double , но може също да връща стойности като 128-битова десетична стойност,  стига изразът да се разреши до 128-битова десетична стойност.

Това е така, дори когато само един от изразите е 128-битов десетичен.

Да предположим, че добавяме следните документи към нашата колекция:

{ "_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 }

Нека стартираме $atan2 оператор срещу тези документи:

db.data.aggregate(
  [
    { $match: { _id: { $in: [ 2, 3, 4 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a", "$b" ] }
      }
    }
  ]
)

Резултат:

{ "arctangent" : NumberDecimal("0.4877792766738730791507215461936449") }
{ "arctangent" : NumberDecimal("0.7539075768401526572881006364456838") }
{ "arctangent" : NumberDecimal("0.8168887499547439619432210551940676") }

Във всички случаи изходът е 128-битов десетичен знак.

Нулеви стойности

Нулевите стойности връщат null когато използвате $atan2 оператор. Това е вярно дори ако единственият от изразите е null .

Да предположим, че добавяме следните документи към нашата колекция:

{ "_id" : 5, "a" : null, "b" : 2 }
{ "_id" : 6, "a" : 2, "b" : null }
{ "_id" : 7, "a" : 2, "null" : null }

Нека стартираме $atan2 оператор срещу тези документи:

db.data.aggregate(
  [
    { $match: { _id: { $in: [ 5, 6, 7 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a", "$b" ] }
      }
    }
  ]
)

Резултат:

{ "arctangent" : null }
{ "arctangent" : null }
{ "arctangent" : null }

Можем да видим, че резултатът е null във всички случаи.

NaN стойности

Ако аргументът се разреши до NaN$atan2 връща NaN .

Пример:

db.data.aggregate(
  [
    { $match: { _id: { $in: [ 2, 3, 4 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a" * 1, "$b" ] }
      }
    }
  ]
)

Резултат:

{ "arctangent" : NumberDecimal("NaN") }
{ "arctangent" : NumberDecimal("NaN") }
{ "arctangent" : NaN }

Нека го променим леко, така че да умножим полето b вместо полето a .

db.data.aggregate(
  [
    { $match: { _id: { $in: [ 2, 3, 4 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a", "$b" * 1 ] }
      }
    }
  ]
)

Резултат:

{ "arctangent" : NumberDecimal("NaN") }
{ "arctangent" : NaN }
{ "arctangent" : NumberDecimal("NaN") }

И сега нека умножим и двете полета:

db.data.aggregate(
  [
    { $match: { _id: { $in: [ 2, 3, 4 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a" * 1, "$b" * 1 ] }
      }
    }
  ]
)

Резултат:

{ "arctangent" : NaN }
{ "arctangent" : NaN }
{ "arctangent" : NaN }

Несъществуващи полета

Ако $atan2 операторът се прилага срещу поле, което не съществува, null се връща.

Пример:

db.data.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $atan2: [ "$a", "$name" ] }
      }
    }
  ]
)

Резултат:

{ "result" : null }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. ECONNREFUSED грешка при свързване към mongodb от node.js

  2. Изтеглете запис от масив чрез Meteor

  3. Сравнение на дати в mongodb

  4. Настройка на среда MongoDB | Инсталирайте MongoDB на Windows

  5. Изображението, върнато от REST API, винаги се показва неработещо