MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB $atan2

Di MongoDB, $atan2 operator pipa agregasi mengembalikan busur (singgung terbalik) dari satu nilai dibagi dengan yang lain.

Anda memberikan dua nilai dalam array. Masing-masing dari dua nilai yang diberikan ke $atan2 dapat berupa ekspresi valid apa pun yang menghasilkan angka.

Nilai kembalian dalam radian.

$atan2 operator diperkenalkan di MongoDB 4.2.

Contoh

Misalkan kita memiliki koleksi yang disebut data dengan dokumen berikut:

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

Kita bisa menggunakan $atan2 operator untuk mengembalikan arctangent dari a bidang dibagi dengan b bidang:

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

Hasil:

{ "arctangent" :0.5880026035475675 }

Konversikan ke Derajat

Seperti yang disebutkan, $atan2 mengembalikan hasilnya dalam radian. Anda dapat menggunakan $radiansToDegrees operator jika Anda ingin hasilnya dalam derajat.

Contoh:

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

Hasil:

{ "radian" :0.5880026035475675, "derajat" :33.690067525979785 }

Dalam contoh ini, bidang pertama menyajikan hasil dalam radian, dan bidang kedua menyajikannya dalam derajat.

Nilai Desimal 128-Bit

Secara default, $atan2 operator mengembalikan nilai sebagai double , tetapi juga dapat mengembalikan nilai sebagai desimal 128-bit selama ekspresi diselesaikan menjadi nilai desimal 128-bit.

Ini adalah kasus bahkan ketika hanya satu ekspresi yang desimal 128-bit.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Mari kita jalankan $atan2 operator terhadap dokumen tersebut:

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

Hasil:

{ "arctangent" :NumberDecimal("0.487779276738730791507215461936449") }{ "arctangent" :NumberDecimal("0.7539075768401526572881006364456838") }{ "arctangent" :NumberDecimal("0.816888749954743946194322") 

Dalam semua kasus, outputnya adalah desimal 128-bit.

Nilai Null

Nilai nol mengembalikan null saat menggunakan $atan2 operator. Ini benar bahkan jika satu-satunya ekspresi adalah null .

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Mari kita jalankan $atan2 operator terhadap dokumen tersebut:

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

Hasil:

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

Kita dapat melihat bahwa hasilnya adalah null dalam semua kasus.

Nilai NaN

Jika argumen diselesaikan menjadi NaN$atan2 mengembalikan NaN .

Contoh:

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

Hasil:

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

Mari kita ubah sedikit, sehingga kita mengalikan bidang b alih-alih bidang a .

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

Hasil:

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

Dan sekarang mari kita kalikan kedua bidang:

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

Hasil:

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

Bidang Tidak Ada

Jika $atan2 operator diterapkan pada bidang yang tidak ada, null dikembalikan.

Contoh:

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

Hasil:

{ "hasil" :null }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kueri luwak di mana nilainya bukan nol

  2. Apakah ada cara untuk 'cantik' mencetak output shell MongoDB ke file?

  3. Tidak dapat membuat/membuka file kunci:/data/mongod.lock errno:13 Izin ditolak

  4. Luwak - disebabkan oleh ::11000 E11000 indeks kesalahan kunci duplikat?

  5. Cara menemukan substring di bidang di Mongodb