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

MongoDB $substrCP

Di MongoDB, $substrCP operator pipeline agregasi mengembalikan substring string, berdasarkan indeks titik kode UTF-8 yang ditentukan.

Sintaks

Sintaksnya seperti ini:

{ $substrCP: [ <string expression>, <code point index>, <code point count> ] }

Dimana:

  • <string expression> adalah string. Itu bisa berupa ekspresi apa pun yang valid selama itu diselesaikan menjadi string.
  • <code point index> adalah di mana untuk memulai substring. Itu bisa berupa ekspresi apa pun yang valid selama itu diselesaikan ke bilangan bulat non-negatif.
  • <code point count> adalah berapa banyak poin kode yang harus dilanjutkan oleh substring. Itu bisa berupa ekspresi apa pun yang valid selama itu diselesaikan ke bilangan bulat atau angka non-negatif yang dapat direpresentasikan sebagai bilangan bulat.

Contoh

Bayangkan kita memiliki koleksi yang disebut tests dengan dokumen berikut:

{ "_id" : 1, "data" : "Red Firetruck" }

Kita dapat menggunakan $substrCP seperti ini:

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

Hasil:

{ "data" : "Red Firetruck", "result" : "Red" }

Indeks dimulai dari nol, dan substring kita dimulai dari awal string, dan berlanjut selama tiga poin kode.

Dalam hal ini, kami menggunakan karakter bahasa Inggris dan setiap karakter memiliki satu titik kode. Hal ini memudahkan kita untuk menghitung berapa banyak kode poin yang akan digunakan.

Mari kita jalankan contoh lain:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 1 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result_1: { $substrCP: [ "$data", 4, 4 ] },
            result_2: { $substrCP: [ "$data", 8, 5 ] },
            result_3: { $substrCP: [ "$data", 8, 20 ] }
          }
     }
   ]
).pretty()

Hasil:

{
	"data" : "Red Firetruck",
	"result_1" : "Fire",
	"result_2" : "truck",
	"result_3" : "truck"
}

Perhatikan di hasil ketiga kami, kami menetapkan lebih banyak poin kode daripada yang tersedia, tetapi itu hanya mengembalikan semua karakter ke akhir string.

Tanda Diakritik

Beberapa karakter memiliki tanda diakritik yang ditambahkan, menghasilkan beberapa poin kode.

Misalkan kita memiliki koleksi bernama thai yang berisi dokumen-dokumen berikut:

{ "_id" : 1, "data" : "ไม้เมือง" }
{ "_id" : 2, "data" : "ไ" }
{ "_id" : 3, "data" : "ม้" }
{ "_id" : 4, "data" : "เ" }
{ "_id" : 5, "data" : "มื" }
{ "_id" : 6, "data" : "อ" }
{ "_id" : 7, "data" : "ง" }

Dokumen-dokumen ini berisi karakter Thailand. Kita dapat melihat bahwa dua karakter ini menyertakan diakritik (mesin terbang kecil di atas mesin terbang awal).

Dokumen 2 sampai 7 hanya mencantumkan setiap karakter yang ada di dokumen 1.

Sebelum kita mengambil substring, mari kita cari tahu berapa banyak titik kode yang dimiliki masing-masing karakter ini dengan menggunakan $strLenCP operator:

db.thai.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenCP: "$data" }
          }
     }
   ]
)

Hasil:

{ "data" : "ไม้เมือง", "result" : 8 }
{ "data" : "ไ", "result" : 1 }
{ "data" : "ม้", "result" : 2 }
{ "data" : "เ", "result" : 1 }
{ "data" : "มื", "result" : 2 }
{ "data" : "อ", "result" : 1 }
{ "data" : "ง", "result" : 1 }

Kita dapat melihat bahwa dua karakter dengan diakritik memiliki dua titik kode, dan yang lainnya memiliki satu titik kode.

Mari kita terapkan $substrCP ke dokumen pertama:

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

Hasil:

{ "data" : "ไม้เมือง", "result" : "ม้" }

Berdasarkan titik awal kami dari 1 dan jumlah poin kode kami 2 , kita mendapatkan karakter kedua dan diakritik yang terkait.

Pisahkan Glyphs

Pada contoh sebelumnya, argumen ketiga kita adalah 2 sehingga mengembalikan karakter dan diakritik secara bersamaan. Inilah yang terjadi ketika kami memberikan argumen ketiga dari 1.

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

Hasil:

{ "data" : "ไม้เมือง", "result" : "ม" }

Karakter pertama dikembalikan tanpa tanda diakritik.

Jenis Data Lainnya

$substrCP operator hanya bekerja pada string. Namun, jika Anda memiliki tipe data lain, itu akan tetap berfungsi, selama dapat diselesaikan menjadi string.

Misalkan kita memiliki dokumen berikut:

{ "_id" : 2, "data" : 123456 }

data kolom berisi angka.

Inilah yang terjadi ketika kita menerapkan $substrCP ke bidang itu:

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

Hasil:

{ "data" : 123456, "result" : "23" }

Itu berhasil melakukan pekerjaan dengan baik (meskipun perlu diingat bahwa hasilnya adalah string – bukan angka).

Kami memiliki dokumen lain dengan objek Date:

{ "_id" : 3, "data" : ISODate("2021-01-03T23:30:15.100Z") }

Sekarang mari kita terapkan $substrCP ke dokumen itu:

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

Hasil:

{ "data" : ISODate("2021-01-03T23:30:15.100Z"), "result" : "2021" }

Jadi itu bekerja dengan baik dalam skenario ini juga.

Nilai Null

Jika string null , hasilnya adalah string kosong.

Misalkan kita memiliki dokumen berikut:

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

Inilah yang terjadi ketika kita menerapkan $substrCP ke dokumen itu:

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

Hasil:

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

Bidang Tidak Ada

Mencoba mendapatkan substring dari bidang yang tidak ada menghasilkan string kosong.

Misalkan kita memiliki dokumen berikut:

{ "_id" : 5 } 

Terapkan $substrCP :

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

Hasil:

{ "result" : "" }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menyimpan beberapa file kecil (di bawah 1 MB) dengan MongoDB di NodeJS TANPA GridFS

  2. Cara menginstal dan mengkonfigurasi MongoDB di Ubuntu

  3. Temukan Nilai yang Tidak Mengandung Angka dalam SQL

  4. Bagaimana cara mengaktifkan otentikasi di MongoDB melalui Docker?

  5. Menginstal dan Menjalankan MongoDB di OSX