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

MongoDB $strLenCP

MongoDB, $strLenCP operator pipa agregasi mengembalikan jumlah titik kode UTF-8 dalam string yang ditentukan.

$strLenCP operator berbeda dengan $strLenBytes operator, yang mengembalikan jumlah byte dalam string.

Contoh

Misalkan kita memiliki koleksi bernama english dengan dokumen sebagai berikut:

{ "_id" :1, "data" :"Maimuang" }{ "_id" :2, "data" :"M" }{ "_id" :3, "data" :"a" }{ " _id" :4, "data" :"i" }{ "_id" :5, "data" :"m" }{ "_id" :6, "data" :"u" }{ "_id" :7, "data" :"a" }{ "_id" :8, "data" :"n" }{ "_id" :9, "data" :"g" }

Kita dapat menerapkan $strLenCP ke bidang data dalam dokumen tersebut:

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

Hasil:

{ "data" :"Maimuang", "hasil" :8 }{ "data" :"M", "hasil" :1 }{ "data" :"a", "hasil" :1 }{ " data" :"i", "hasil" :1 }{ "data" :"m", "hasil" :1 }{ "data" :"u", "hasil" :1 }{ "data" :"a ", "hasil" :1 }{ "data" :"n", "hasil" :1 }{ "data" :"g", "hasil" :1 }

Kita dapat melihat bahwa keseluruhan kata menggunakan 8 titik kode dan setiap karakter menggunakan satu titik kode.

Karakter Thailand

Berikut adalah contoh yang menggunakan karakter Thailand, yang masing-masing berukuran 3 byte, tetapi hanya menggunakan satu titik kode.

Kami memiliki koleksi yang disebut thai dengan dokumen sebagai berikut:

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

Dan inilah yang terjadi ketika kita menerapkan $strLenCP ke dokumen-dokumen itu:

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

Hasil:

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

Dua dari karakter ini telah dimodifikasi menggunakan diakritik, yang menghasilkan 2 poin kode yang dikembalikan. Karakter ini mengembalikan 6 byte saat menggunakan $strLenBytes operator.

Karakter Lain

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

{ "_id" :1, "data" :"é" }{ "_id" :2, "data" :"©" }{ "_id" :3, "data" :"℘" } 

Dan mari kita terapkan $strLenCP ke dokumen-dokumen itu:

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

Hasil:

{ "data" :"é", "result" :1 }{ "data" :"©", "result" :1 }{ "data" :"℘", "result" :1 } 

Masing-masing karakter ini menggunakan satu titik kode (walaupun karakter tersebut menggunakan lebih dari satu byte).

Karakter spasi menggunakan titik kode. Oleh karena itu, dua karakter spasi menggunakan 2 titik kode, dan seterusnya.

Misalkan kita memiliki dokumen berikut:

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

Dan kami menerapkan $strLenCP ke dokumen-dokumen itu:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 4, 5 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenCP: "$data" }
          }
     }
   ]
) 

Hasil:

{ "data" :" ", "hasil" :1 }{ "data" :" ", "hasil" :2 }

String Kosong

String kosong mengembalikan 0 .

Ini dokumen dengan string kosong:

{ "_id" :6, "data" :"" }

Dan inilah yang terjadi ketika kita menerapkan $strLenCP ke dokumen itu:

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

Hasil:

{ "data" :"", "hasil" :0 }

Jenis Data Salah

Melewati tipe data yang salah akan menghasilkan kesalahan.

Misalkan kita memiliki dokumen berikut:

{ "_id" :7, "data" :123 }

Data field berisi angka.

Mari kita terapkan $strLenCP ke dokumen itu:

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

Hasil:

pengecualian yang tidak tertangkap:Kesalahan:perintah gagal:{ "ok" :0, "errmsg" :"$strLenCP memerlukan argumen string, ditemukan:double", "code" :34471, "codeName" :"Location34471"} :agregat gagal :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:639 :[email protected]/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12 @(kulit)::1:1

Nilai Null

Memberikan null juga menghasilkan kesalahan.

Misalkan kita memiliki dokumen berikut:

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

Data field berisi null .

Mari kita terapkan $strLenCP ke dokumen itu:

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

Hasil:

Kesalahan:perintah gagal:{ "ok" :0, "errmsg" :"$strLenCP memerlukan argumen string, ditemukan:null", "code" :34471, "codeName" :"Location34471"} :agregat gagal :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:639:17example@ sqldat.com/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12@(shell )::1:1

Bidang Tidak Ada

Melanjutkan tema menghasilkan kesalahan, menentukan bidang yang tidak ada juga menghasilkan kesalahan.

Dokumen:

{ "_id" :9 }

Terapkan $strLenCP :

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

Hasil:

Kesalahan:perintah gagal:{ "ok" :0, "errmsg" :"$strLenCP memerlukan argumen string, ditemukan:hilang", "code" :34471, "codeName" :"Location34471"} :agregat gagal :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:639:17example@ sqldat.com/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12@(shell )::1:1

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $isoWeek

  2. Cara Menghubungkan ke MySQL Tanpa Kata Sandi Root di Terminal

  3. Mongo Change Streams berjalan beberapa kali (semacam):Aplikasi Node menjalankan beberapa instance

  4. Masalah MongoDB PHP UTF-8

  5. Bagaimana cara memasukkan banyak dokumen sekaligus di MongoDB melalui Java