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

MongoDB $strLenBytes

MongoDB, $strLenBytes operator pipeline agregasi mengembalikan jumlah byte yang disandikan UTF-8 dalam string yang ditentukan.

Setiap karakter dalam string dapat berisi jumlah byte yang berbeda, tergantung pada karakter yang digunakan. $strLenBytes operator dapat mengetahui berapa banyak byte yang dikandung setiap karakter dan mengembalikan hasil yang benar untuk seluruh 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 $strLenBytes ke bidang data dalam dokumen tersebut:

db.english.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$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 adalah 8 byte dan setiap karakter masing-masing 1 byte.

Karakter Thailand

Berikut adalah contoh yang menggunakan karakter Thailand, yang masing-masing berukuran 3 byte.

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 $strLenBytes ke dokumen-dokumen itu:

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

Hasil:

{ "data" :"ไม้เมือง", "hasil" :24 }{ "data" :"ไ", "hasil" :3 }{ "data" :"ม้", "hasil" :6 }{ "data" :"เ", "hasil" :3 }{ "data" :"มื", "hasil" :6 }{ "data" :"อ", "hasil" :3 }{ "data" :" ", "hasil" :3 }

Dua karakter ini telah dimodifikasi menggunakan diakritik, yang menghasilkan 6 byte yang dikembalikan.

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 $strLenBytes ke dokumen-dokumen itu:

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

Hasil:

{ "data" :"é", "result" :2 }{ "data" :"©", "result" :2 }{ "data" :"℘", "result" :3 } 

Dua karakter pertama adalah 2 byte dan yang ketiga adalah 3 byte. Jumlah byte tergantung pada karakter. Beberapa karakter dapat menggunakan 4 byte.

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

Misalkan kita memiliki dokumen berikut:

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

Dan kami menerapkan $strLenBytes ke dokumen-dokumen itu:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 4, 5 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$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 $strLenBytes ke dokumen itu:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 6 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$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 $strLenBytes ke dokumen itu:

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

Hasil:

Kesalahan:perintah gagal:{ "ok" :0, "errmsg" :"$strLenBytes memerlukan argumen string, ditemukan:double", "code" :34473, "codeName" :"Location34473"} :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

Nilai Null

Memberikan null juga menghasilkan kesalahan.

Misalkan kita memiliki dokumen berikut:

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

Data field berisi null .

Mari kita terapkan $strLenBytes ke dokumen itu:

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

Hasil:

pengecualian tidak tertangkap:Kesalahan:perintah gagal:{ "ok" :0, "errmsg" :"$strLenBytes memerlukan argumen string, ditemukan:null", "code" :34473, "codeName" :"Location34473"} :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

Bidang Tidak Ada

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

Dokumen:

{ "_id" :9 }

Terapkan $strLenBytes :

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

Hasil:

Kesalahan:perintah gagal:{ "ok" :0, "errmsg" :"$strLenBytes memerlukan argumen string, ditemukan:hilang", "code" :34473, "codeName" :"Location34473"} :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. Cara Menyebarkan Database Open edX MongoDB untuk Ketersediaan Tinggi

  2. Pembaruan sebagian dari subdokumen dengan nodejs/luwak

  3. Bagaimana cara mendapatkan objectID setelah saya menyimpan objek di Mongoose?

  4. MongooseError [MongooseServerSelectionError]:koneksi <monitor> ke 52.6.250.237:27017 ditutup

  5. Cara menggunakan MongoDB di Heroku