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

MongoDB $asin

Di MongoDB, $asin operator pipa agregasi mengembalikan arcsine (sinus terbalik) dari suatu nilai, diukur dalam radian.

$asin menerima ekspresi valid apa pun yang menghasilkan angka antara -1 dan 1 .

$asin operator diperkenalkan di MongoDB 4.2.

Contoh

Misalkan kita memiliki koleksi yang disebut test dengan dokumen berikut:

{ "_id" : 1, "data" : 0.5 }

Kita dapat menggunakan $asin operator untuk mengembalikan arccosine dari data bidang:

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$data" }
      }
    }
  ]
)

Hasil:

{ "arcsine" : 0.5235987755982988 }

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

Konversikan ke Derajat

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

Contoh:

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

Hasil:

{ "radians" : 0.5235987755982988, "degrees" : 29.999999999999996 }

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

Nilai Desimal 128-Bit

Jika ekspresi diberikan ke $asin adalah desimal 128-bit, maka hasilnya dikembalikan dalam desimal 128-bit.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id" : 2, "data" : NumberDecimal("0.1301023541559787031443874490659") }

Mari kita jalankan $asin operator terhadap dokumen itu:

db.test.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$data" }
      }
    }
  ]
)

Hasil:

{ "arcsine" : NumberDecimal("0.1304722105697547116336288178856500") }

Outputnya adalah desimal 128-bit.

Nilai Null

Nilai nol mengembalikan null saat menggunakan $asin operator.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id" : 3, "data" : null }

Mari kita jalankan $asin operator terhadap dokumen itu:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$data" }
      }
    }
  ]
)

Hasil:

{ "arcsine" : null }

Kita dapat melihat bahwa hasilnya adalah null .

Nilai NaN

Jika argumen diselesaikan menjadi NaN$asin mengembalikan NaN .

Contoh:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: 1 * "String" }
      }
    }
  ]
)

Hasil:

{ "arcsine" : NaN }

Dalam hal ini ekspresi mencoba mengalikan angka dengan string, yang menghasilkan NaN dikembalikan.

Tak Terbatas

Jika argumen diselesaikan menjadi Infinity atau -Infinity , $asin operator mengembalikan kesalahan.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id" : 4, "data" : Infinity }

Mari kita jalankan $asin terhadap bidang data:

db.test.aggregate(
  [
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$data" }
      }
    }
  ]
)

Hasil:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $asin to inf, value must in [-1,1]",
	"code" : 50989,
	"codeName" : "Location50989"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Itu kesalahan yang saya dapatkan di mongo shell saat menjalankan kode itu.

Bidang Tidak Ada

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

Contoh:

db.test.aggregate(
  [
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$wrong" }
      }
    }
  ]
)

Hasil:

{ "arcsine" : null }

Nilai Di Luar Rentang

Memberikan nilai di luar jangkauan ke $asin akan menghasilkan kesalahan. Kami telah melihat apa yang terjadi ketika kami memberikan Infinity ke $asin . Sekarang mari kita gunakan nilai yang lebih membumi, seperti katakanlah, 2 .

Misalkan kita menambahkan dokumen berikut ke koleksi:

{ "_id" : 5, "data" : 2 }

Sekarang mari kita jalankan $asin terhadap data bidang:

db.test.aggregate(
  [
    { $match: { _id: 5 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$data" }
      }
    }
  ]
)

Hasil:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $asin to 2, value must in [-1,1]",
	"code" : 50989,
	"codeName" : "Location50989"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Seperti yang ditunjukkan oleh pesan kesalahan, nilainya harus antara -1 dan 1 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Masukkan Nilai pada Posisi Tertentu dalam Array di MongoDB

  2. SSL MongoDB dengan sertifikat yang ditandatangani sendiri di C#

  3. Kueri MongoDB dengan kriteria panjang

  4. Masukkan elemen ke dalam array bersarang di MongoDB

  5. Apa yang Baru di MongoDB 4.4