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

MongoDB $cos

Di MongoDB, $cos operator pipa agregasi mengembalikan kosinus dari nilai yang diukur dalam radian.

$cos menerima ekspresi valid apa pun yang menghasilkan angka.

$cos operator diperkenalkan di MongoDB 4.2.

Contoh

Misalkan kita memiliki koleksi yang disebut test dengan dokumen berikut:

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

Kita dapat menggunakan $cos operator untuk mengembalikan kosinus dari data bidang:

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

Hasil:

{ "cosine" : -0.9899924966004454 }

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

Bila Ekspresi dalam Derajat

Seperti yang disebutkan, $cos menerima ekspresinya dalam radian. Anda dapat menggunakan $degreesToRadians operator untuk mengonversi nilai apa pun dari derajat ke radian.

Contoh:

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

Hasil:

{ "cosine" : -0.017278628635716543 }

Nilai Null

Nilai nol mengembalikan null saat menggunakan $cos operator.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Mari kita jalankan $cos operator terhadap dokumen itu:

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

Hasil:

{ "cosine" : null }

Kita dapat melihat bahwa hasilnya adalah null .

Nilai NaN

Jika argumen diselesaikan menjadi NaN , $cos mengembalikan NaN .

Contoh:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        cosine: { $cos: 1 * "string" }
      }
    }
  ]
)

Hasil:

{ "cosine" : NaN }

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

Tak Terbatas

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

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Mari kita jalankan $cos terhadap bidang data:

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

Hasil:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $cos to inf, value must in (-inf,inf)",
	"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 cangkang.

Bidang Tidak Ada

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

Contoh:

db.test.aggregate(
  [
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        cosine: { $cos: "$carrots" }
      }
    }
  ]
)

Hasil:

{ "cosine" : null }

Desimal 128-bit

Seperti yang disebutkan, jika ekspresi diberikan ke $cos adalah desimal 128-bit, maka hasilnya dikembalikan dalam desimal 128-bit.

Misalkan kita menambahkan dokumen berikut ke koleksi:

{ "_id" : 5, "data" : NumberDecimal("1.1301023541559787031443874490659") }

Inilah yang terjadi ketika kita menjalankannya melalui $cos operator:

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

Hasil:

{ "cosine" : NumberDecimal("0.4265672353490945266548815934449746") }

Outputnya adalah desimal 128-bit.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara memasukkan elemen ke daftar internal MongoDB?

  2. Meteor tanpa mongo

  3. MongoDB $isoDayOfWeek

  4. Satu publikasi menyembunyikan bidang bersarang dari publikasi lain

  5. Bagaimana cara memasukkan banyak dokumen sekaligus di MongoDB melalui Java