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 adalahnull
.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
mengembalikanNaN
.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 bidanga
.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 }