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 :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
example@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/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 }