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

MongoDB $ln

Di MongoDB, $ln operator pipa agregasi menghitung logaritma natural (ln ) dari angka dan mengembalikan hasilnya sebagai ganda.

Sintaks

Sintaksnya seperti ini:

{ $ln: <number> }

Dimana <number> dapat berupa ekspresi valid apa pun yang menghasilkan bilangan non-negatif.

Contoh

Misalkan kita memiliki koleksi yang disebut test dengan dokumen berikut:

{ "_id" : 1, "data" : 0.5 }
{ "_id" : 2, "data" : 20 }
{ "_id" : 3, "data" : 200 }

Kita dapat menggunakan $ln operator untuk mengembalikan logaritma natural dari data bidang:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 1, 2, 3 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" ] }
        }
    }
  ]
)

Hasil:

{ "data" : 0.5, "result" : -0.6931471805599453 }
{ "data" : 20, "result" : 2.995732273553991 }
{ "data" : 200, "result" : 5.298317366548036 }

Cara lain untuk melakukan ini adalah dengan menggunakan $log operator dengan argumen kedua Math.E . Lihat MongoDB $log sebagai contoh.

Logaritma Alami

Logaritma natural suatu bilangan adalah logaritmanya terhadap dasar konstanta matematika e , di mana e adalah bilangan irasional dan transendental yang dimulai dengan 2,7182818284590452353602874713527 dan berlanjut selamanya.

Konstanta matematika e juga dikenal sebagai bilangan Euler.

Dalam JavaScript, kita dapat menggunakan Math.E untuk mewakili e . Oleh karena itu kita bisa mendapatkan logaritma natural dari e dengan menggunakan Math.E sebagai argumen saat menggunakan $ln .

Misalkan kita memiliki dokumen seperti ini:

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

Bidang data berisi e hingga 15 tempat desimal.

Contoh ini menggunakan dua cara untuk mengembalikan logaritma natural dari e :

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 4 ] } } },
    {
      $project:
        { 
          _id: 0,
          e_1: { $ln: [ "$data" ] },
          e_2: { $ln: [ Math.E ] }
        }
    }
  ]
)

Hasil:

{ "e_1" : 1, "e_2" : 1 }

Hasil pertama menggunakan data dari dokumen. Untuk hasil kedua, kami menggunakan Math.E untuk menghasilkan e .

Bagaimanapun, hasilnya adalah 1 .

Nilai Di Luar Rentang

Seperti disebutkan, $ln operator menerima ekspresi valid apa pun yang menghasilkan angka non-negatif. Nilai di luar rentang tersebut akan menyebabkan kesalahan.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id" : 5, "data" : -20 }

Mari kita jalankan $ln operator terhadap dokumen itu:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 5 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" ] }
        }
    }
  ]
)

Hasil:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$ln's argument must be a positive number, but is -20",
	"code" : 28766,
	"codeName" : "Location28766"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

Jenis Data Salah

Memberikan tipe data yang salah juga akan menyebabkan kesalahan.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{ "_id" : 6, "data" : "Ten" }

Mari kita jalankan $ln operator terhadap dokumen itu:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 6 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" ] }
        }
    }
  ]
)

Hasil:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$ln only supports numeric types, not string",
	"code" : 28765,
	"codeName" : "Location28765"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

Kami menyediakan string, sehingga pesan kesalahan memberi tahu kami bahwa $ln only supports numeric types, not string .

Nilai Null

Nilai nol mengembalikan null saat menggunakan $ln operator.

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Mari kita jalankan $ln operator terhadap dokumen itu:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 7 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" ] }
        }
    }
  ]
)

Hasil:

{ "data" : null, "result" : null }

Kita dapat melihat bahwa hasilnya adalah null .

Nilai NaN

Jika argumen diselesaikan menjadi NaN$ln mengembalikan NaN .

Contoh:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 1 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$data" * 1 ] }
        }
    }
  ]
)

Hasil:

{ "data" : 0.5, "result" : NaN }

Bidang Tidak Ada

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

Contoh:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 1 ] } } },
    {
      $project:
        { 
          _id: 0,
          data: 1,
          result: { $ln: [ "$age" ] }
        }
    }
  ]
)

Hasil:

{ "data" : 0.5, "result" : null }

Dalam hal ini kami mencoba menerapkan $ln terhadap bidang yang disebut age , tetapi bidang itu tidak ada di dokumen, jadi kami mendapatkan null .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Codec MongoDB BSON tidak digunakan saat menyandikan objek

  2. Luwak:Skema vs Model?

  3. MongoDB mongorestore dan koleksi yang ada dengan catatan

  4. Bagaimana Anda bisa menghapus semua dokumen dari koleksi dengan Mongoose?

  5. Cara mengizinkan semua host ke set replika di mongodb