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

MongoDB $acos

Di MongoDB, $acos operator pipa agregasi mengembalikan arccosine (inverse cosinus) dari suatu nilai, diukur dalam radian.

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

$acos 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 $acos operator untuk mengembalikan arccosine dari data bidang:

db.test.aggregate(
  [
    { $project: { 
        _id: 0,
        arccosine: { $acos: "$data" }
      }
    }
  ]
)

Hasil:

{ "arccosine" : 1.0471975511965976 }

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

Pi

Memberikan resolusi -1 ke konstanta matematika pi (π).

Misalkan kita menambahkan dokumen berikut ke koleksi kita, yang berisi nilai data -1 .

{ "_id" : 2, "data" : -1 }

Sekarang mari kita jalankan $acos operator terhadap bidang itu:

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

Hasil:

{ "arccosine" : 3.141592653589793 }

Hasil ini adalah hingga 15 tempat desimal.

Konversikan ke Derajat

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

Contoh:

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

Hasil:

{ "radians" : 3.141592653589793, "degrees" : 180 }

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

Nilai Null

Nilai nol mengembalikan null saat menggunakan $acos operator.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Mari kita jalankan $acos operator terhadap dokumen itu:

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

Hasil:

{ "arccosine" : null }

Kita dapat melihat bahwa hasilnya adalah null .

Nilai NaN

Jika argumen diselesaikan menjadi NaN , $acos mengembalikan NaN .

Contoh:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        arccosine: { $acos: 1 * "oops!" }
      }
    }
  ]
)

Hasil:

{ "arccosine" : NaN }

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

Tak Terbatas

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

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Mari kita jalankan $acos terhadap bidang data:

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

Hasil:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $acos 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 $acos operator diterapkan pada bidang yang tidak ada, null dikembalikan.

Contoh:

db.test.aggregate(
  [
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        arccosine: { $acos: "$oops" }
      }
    }
  ]
)

Hasil:

{ "arccosine" : null }

Nilai Di Luar Rentang

Memberikan nilai di luar jangkauan ke $acos akan menghasilkan kesalahan.

Misalkan kita menambahkan dokumen berikut ke koleksi:

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

Sekarang mari kita jalankan $acos terhadap data bidang:

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

Hasil:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $acos 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 disinggung oleh pesan kesalahan, nilainya harus antara -1 dan 1 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kelompokkan berdasarkan nilai dan kondisi

  2. Di MongoDB mapreduce, bagaimana saya bisa meratakan objek nilai?

  3. MongoDB $milidetik

  4. Dapatkan dokumen dengan tag dalam daftar, diurutkan berdasarkan jumlah total kecocokan

  5. GALAT:Tidak dapat menulis file pid ke /var/run/mongodb/mongod.pid:Tidak ada file atau direktori seperti itu inf fedora 20