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

MongoDB $pow

Di MongoDB, $pow operator pipa agregasi menaikkan angka ke eksponen yang ditentukan dan mengembalikan hasilnya

$pow menerima dua ekspresi, disediakan dalam array. Yang pertama adalah angkanya, dan yang kedua adalah eksponennya. Keduanya dapat berupa ekspresi apa pun yang valid, selama keduanya menghasilkan angka.

Contoh

Misalkan kita memiliki koleksi yang disebut test dengan dokumen sebagai berikut:

{ "_id" : 1, "data" : 10 }
{ "_id" : 2, "data" : -3 }
{ "_id" : 3, "data" : 0 }
{ "_id" : 4, "data" : null }

Kita dapat menggunakan $pow operator untuk menaikkan data bidang oleh eksponen tertentu:

db.test.aggregate(
  [
    { $project: { 
        _id: 0,
        result: { $pow: [ "$data", 3 ] }
      }
    }
  ]
)

Hasil:

{ "result" : 1000 }
{ "result" : -27 }
{ "result" : 0 }
{ "result" : null }

Dalam hal ini, saya menggunakan data bidang sebagai nomor, dan 3 sebagai eksponen. Oleh karena itu, setiap dokumen memiliki data medan yang dibangkitkan oleh kekuatan 3.

Kita dapat melihat bahwa null nilai mengembalikan null .

Hasilnya biasanya jenis yang sama dengan input. Namun, ada pengecualian untuk aturan ini. Khususnya:

  • Integer 32-bit akan dikonversi menjadi integer 64-bit jika hasilnya dapat direpresentasikan sebagai integer 64-bit.
  • Integer 32-bit akan dikonversi menjadi double jika hasilnya tidak dapat direpresentasikan sebagai integer 64-bit.
  • Integer 64-bit akan dikonversi menjadi dua kali lipat jika hasilnya tidak dapat direpresentasikan sebagai integer 64-bit.

Eksponen Negatif

Anda tidak dapat menaikkan nol (0 ) ke eksponen negatif.

Contoh:

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

Hasil:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$pow cannot take a base of 0 and a negative exponent",
	"code" : 28764,
	"codeName" : "Location28764"
} : 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

Kesalahan secara eksplisit menyatakan bahwa “$pow tidak dapat mengambil basis 0 dan eksponen negatif “.

Namun, jika kami mengecualikan dokumen 3, kami tidak lagi mendapatkan kesalahan:

db.test.aggregate(
  [
    { $match: { _id: { $nin: [ 3 ] } } },
    { $project: { 
        result: { $pow: [ "$data", -3 ] }
      }
    }
  ]
)

Hasil:

{ "_id" : 1, "result" : 0.001 }
{ "_id" : 2, "result" : -0.037037037037037035 }
{ "_id" : 4, "result" : null }

Nilai NaN

Jika argumen diselesaikan menjadi NaN , $pow mengembalikan NaN .

Contoh:

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

Hasil:

{ "result" : NaN }
{ "result" : NaN }
{ "result" : NaN }
{ "result" : NaN }

Bidang Tidak Ada

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

Contoh:

db.test.aggregate(
  [
    { $project: { 
        _id: 0,
        result: { $pow: [ "$beer", 3 ] }
      }
    }
  ]
)

Hasil:

{ "result" : null }
{ "result" : null }
{ "result" : null }
{ "result" : null }

Eksponen Null

Kami telah melihat bahwa null nilai mengembalikan null . Hal ini juga berlaku saat memberikan null sebagai eksponen.

Contoh:

db.test.aggregate(
  [
    { $project: { 
        _id: 0,
        result: { $pow: [ "$data", null ] }
      }
    }
  ]
)

Hasil:

{ "result" : null }
{ "result" : null }
{ "result" : null }
{ "result" : null }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menerapkan batasan di MongoDB?

  2. Mengimpor Date-datatype menggunakan mongoimport

  3. Cara mengatur volume data docker mongo

  4. MongoDB:Memperbarui dokumen menggunakan data dari dokumen yang sama

  5. Bagaimana cara mengubah pymongo.cursor.Cursor menjadi dict?