Di MongoDB, Anda dapat menggunakan $convert
operator pipa agregasi untuk mengonversi nilai ke jenis yang ditentukan.
Anda dapat mengonversi ekspresi apa pun yang valid menjadi ganda, string, ObjectId, boolean, Tanggal, bilangan bulat, panjang, atau desimal.
Tidak semua tipe dapat dikonversi ke tipe lain. Beberapa tipe hanya dapat dikonversi dari subset tipe MongoDB yang tersedia. Misalnya, Anda tidak dapat mengonversi tanggal menjadi bilangan bulat.
Anda dapat secara opsional menggunakan onError
parameter untuk menentukan apa yang harus dikembalikan jika terjadi kesalahan. Anda dapat secara opsional menggunakan onNull
parameter untuk menentukan apa yang harus dikembalikan jika nilai input nol atau tidak ada.
Contoh Data
Misalkan kita memiliki koleksi yang disebut samples
dengan dokumen berikut:
{ "_id" :ObjectId("6011e471c8eb4369cf6ad9d5"), "double" :123.75, "string" :"123", "boolean" :true, "date" :ISODate("2020-12-31T23:30:15.123Z"), "integer" :123, "long" :NumberLong(123), "decimal" :NumberDecimal("123.75"), "datestring" :"2021-02-15 06:53:55"}Contoh berikut menunjukkan cara mengonversi setiap bidang ke jenis lain.
Konversi ObjectId ke String
_id
bidang dalam dokumen di atas adalah ObjectId. Berikut ini contoh mengonversi ObjectId menjadi string.db.samples.aggregate( [ { $project: { result: { $convert: { input: "$_id", to: "string", onError: "An error occurred", onNull: "Input was null or empty" } } } } ] ).pretty()
Hasil:
{ "_id" :ObjectId("6011e471c8eb4369cf6ad9d5"), "result" :"6011e471c8eb4369cf6ad9d5"}Hasilnya adalah string heksadesimal dari ObjectId dikembalikan sebagai string.
Konversi Gandakan ke Bilangan Bulat
Saat Anda mengonversi dobel ke bilangan bulat, nilai yang terpotong akan dikembalikan.
db.samples.aggregate( [ { $project: { _id: 0, result: { $convert: { input: "$double", to: "int", onError: "An error occurred", onNull: "Input was null or empty" } } } } ] )
Hasil:
{ "hasil" :123 }Nilai ganda terpotong harus berada dalam nilai minimum dan maksimum untuk bilangan bulat. Jika tidak akan terjadi kesalahan.
Selain itu, Anda tidak dapat mengonversi nilai ganda yang nilainya terpotong kurang dari nilai bilangan bulat minimum atau lebih besar dari nilai bilangan bulat maksimum.
Konversi String ke Integer
Saat Anda mengonversi string menjadi bilangan bulat,
$convert
mengembalikan nilai numerik string sebagai bilangan bulat.db.samples.aggregate( [ { $project: { _id: 0, result: { $convert: { input: "$string", to: "int", onError: "An error occurred", onNull: "Input was null or empty" } } } } ] )
Hasil:
{ "hasil" :123 }Nilai string harus berupa basis10 bilangan bulat (mis.
"-123"
,"123"
) dan termasuk dalam nilai minimum dan maksimum untuk bilangan bulat.Konversi Boolean ke Integer
Saat Anda mengonversi boolean ke bilangan bulat,
$convert
mengembalikan1
untuk nilai booleantrue
, dan0
untuk nilai booleanfalse
.db.samples.aggregate( [ { $project: { _id: 0, result: { $convert: { input: "$boolean", to: "int", onError: "An error occurred", onNull: "Input was null or empty" } } } } ] )
Hasil:
{ "hasil" :1 }Konversi Tanggal ke String
Anda dapat menggunakan
$convert
untuk mengembalikan tanggal sebagai string.db.samples.aggregate( [ { $project: { _id: 0, result: { $convert: { input: "$date", to: "string", onError: "An error occurred", onNull: "Input was null or empty" } } } } ] )
Hasil:
{ "hasil" :"2020-12-31T23:30:15.123Z" }Objek Date telah diubah menjadi string.
Konversi Ganda ke Tanggal
Jenis berikut dapat dikonversi menjadi tanggal:
- ganda
- desimal
- panjang
- tali
- Id Objek
Berikut ini contoh mengonversi dobel menjadi tanggal:
db.samples.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$double",
to: "date",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Hasil:
{ "hasil" :ISODate("1970-01-01T00:00:00.123Z") }
Saat Anda mengonversi angka menjadi tanggal, angka tersebut mewakili jumlah milidetik sejak 1 Januari 1970.
Dalam contoh kami, kami memberikan nilai ganda 123
, yang ditafsirkan sebagai 123 milidetik sejak 1 Januari 1970.
Konversi Bilangan Bulat ke Desimal
Berikut ini contoh konversi bilangan bulat ke desimal:
db.samples.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$integer",
to: "decimal",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Hasil:
{ "hasil" :NumberDecimal("123.000000000000") }
Konversi String ke Tanggal
Berikut ini contoh mengonversi string tanggal/waktu menjadi objek Tanggal:
db.samples.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$datestring",
to: "date",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Hasil:
{ "hasil" :ISODate("2021-02-15T06:53:55Z") }
Saat Anda mengonversi string menjadi objek Tanggal, string tersebut harus berupa string tanggal yang valid, seperti:
- 2015-02-15
- 2020-02-15T06:53:55
- 2020-02-15T06:53:55Z
Konversikan ke Boolean
Saat Anda mengonversi nilai ke boolean, hasilnya akan menjadi true
atau false
, tergantung pada nilai masukan.
Umumnya, untuk nilai numerik, ini akan mengembalikan false
jika nilainya nol (0
), dan true
untuk nilai lainnya.
Untuk nilai string, ObjectId, dan Date, akan selalu mengembalikan true
.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$string",
to: "bool",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Hasil:
{ "hasil" :benar }
onError
Parameter
Anda dapat menggunakan onError
parameter untuk mengembalikan nilai tertentu jika terjadi kesalahan.
Misalkan kita memiliki koleksi yang disebut dogs
dengan dokumen berikut:
{ "_id" :1, "name" :"Wag", "born" :"Maret 2020", "weight" :null }
Di bawah ini adalah contoh mencoba melakukan konversi yang gagal karena kesalahan. Pada contoh pertama, kami tidak gunakan onError
.
db.dogs.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$born",
to: "int"
}
}
}
}
]
)
Hasil:
Error: command failed: {
"ok" : 0,
"errmsg" : "Failed to parse number 'March 2020' in $convert with no onError value: Did not consume whole string.",
"code" : 241,
"codeName" : "ConversionFailure"
} : 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 mengakibatkan pesan kesalahan buruk ditampilkan.
Contoh berikut menunjukkan bagaimana kita dapat membuatnya lebih bagus dengan menggunakan onError
parameter.
db.dogs.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$born",
to: "int",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Hasil:
{ "result" :"Terjadi kesalahan" }
Perhatikan bahwa kami masih mendapatkan dokumen yang dikembalikan, dan pesan kesalahan khusus kami ditampilkan di bidang.
onNull
Parameter
Anda dapat secara opsional menggunakan onNull
parameter untuk menentukan apa yang harus dikembalikan jika nilai input nol atau tidak ada.
Menggunakan dokumen sebelumnya, kita dapat menguji onNull
parameternya seperti ini:
db.dogs.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$weight",
to: "decimal",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Hasil:
{ "result" :"Input adalah null atau kosong" }