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

MongoDB $konversi

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 mengembalikan 1 untuk nilai boolean true , dan 0 untuk nilai boolean false .

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" }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Otomatiskan Pemeriksaan Kesehatan Basis Data

  2. MongoDB Menulis Kekhawatiran:3 Peringatan yang Harus Diketahui

  3. Bisakah saya mengubah indeks yang ada di MongoDB tanpa menghapusnya?

  4. Apakah memperpendek nama properti MongoDB bermanfaat?

  5. Buat objek tanggal ISO dalam javascript