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

$strLenBytes vs $strLenCP di MongoDB:Apa Bedanya?

MongoDB menyertakan $strLenBytes dan $strLenCP operator dalam kerangka pipa agregasinya. Operator-operator ini melakukan hal yang serupa tetapi sedikit berbeda. Dalam beberapa kasus, keduanya akan mengembalikan hasil yang sama persis, sementara dalam kasus lain hasilnya akan berbeda.

Berikut adalah ikhtisar singkat tentang perbedaan antara kedua operator ini.

Perbedaan

Berikut definisi dari masing-masing operator:

  • $strLenBytes mengembalikan jumlah byte yang disandikan UTF-8 dalam string yang ditentukan
  • $strLenCP mengembalikan jumlah poin kode UTF-8 dalam string yang ditentukan.

Perhatikan perbedaan dalam huruf tebal. Satu mengembalikan angka byte , yang lain mengembalikan jumlah poin kode .

Saat bekerja dengan string dalam bahasa Inggris, jumlah byte biasanya akan sama dengan jumlah poin kode. Setiap titik kode akan menggunakan satu byte.

Tetapi ketika bekerja dengan bahasa lain yang menggunakan blok Unicode yang berbeda, Anda mungkin menemukan bahwa jumlah byte meningkat menjadi dua atau tiga byte. Hal ini juga berlaku saat bekerja dengan titik kode Unicode lainnya seperti simbol, emoji, dll. Dalam beberapa kasus, satu karakter mungkin menggunakan 4 byte.

Contoh

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

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

Dan sekarang mari kita terapkan keduanya $strLenBytes dan $strLenCP ke bidang data:

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

Hasil:

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

Kita dapat melihat bahwa semua karakter hanya menggunakan satu titik kode, tetapi dokumen pertama menggunakan dua byte dan dua dokumen lainnya masing-masing menggunakan tiga byte.

Karakter Bahasa Inggris

Misalkan kita memiliki koleksi bernama english dengan dokumen sebagai berikut:

{ "_id" :1, "data" :"Anjing cepat" }{ "_id" :2, "data" :"F" }{ "_id" :3, "data" :"a" }{ "_id" :4, "data" :"s" }{ "_id" :5, "data" :"t" }{ "_id" :6, "data" :" " }{ "_id" :7, "data" :"d" }{ "_id" :8, "data" :"o" }{ "_id" :9, "data" :"g" }

Dan sekarang mari kita terapkan keduanya $strLenBytes dan $strLenCP ke bidang data:

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

Hasil:

{ "data" :"Anjing cepat", "strLenCP" :8, "strLenBytes" :8 }{ "data" :"F", "strLenCP" :1, "strLenBytes" :1 }{ "data" :"a", "strLenCP" :1, "strLenBytes" :1 }{ "data" :"s", "strLenCP" :1, "strLenBytes" :1 }{ "data" :"t", "strLenCP" :1, "strLenBytes" :1 }{ "data" :" ", "strLenCP" :1, "strLenBytes" :1 }{ "data" :"d", "strLenCP" :1, "strLenBytes" :1 } { "data" :"o", "strLenCP" :1, "strLenBytes" :1 }{ "data" :"g", "strLenCP" :1, "strLenBytes" :1 }

Dalam hal ini, semua karakter menggunakan satu titik kode dan masing-masing satu byte.

Karakter Thailand

Berikut adalah contoh yang menggunakan karakter Thailand untuk menunjukkan bahwa tidak semua bahasa menggunakan satu byte per titik kode.

Misalkan kita memiliki koleksi bernama 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" :"ง" }

Inilah yang terjadi ketika kita menerapkan keduanya $strLenBytes dan $strLenCP ke bidang data:

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

Hasil:

{ "data" :"ไม้เมือง", "strLenCP" :8, "strLenBytes" :24 }{ "data" :"ไ", "strLenCP" :1, "strLenBytes" :3 }{ "data" :"ม้", "strLenCP" :2, "strLenBytes" :6 }{ "data" :"เ", "strLenCP" :1, "strLenBytes" :3 }{ "data" :"มื", "strLenCP" :2, "strLenBytes" :6 }{ "data" :"อ", "strLenCP" :1, "strLenBytes" :3 }{ "data" :"ง", "strLenCP" :1, "strLenBytes" :3 }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Server memiliki peringatan startup

  2. Cara tercepat untuk menghapus dokumen duplikat di mongodb

  3. MongoDB $setDifference

  4. String proyek agregasi MongoDB ke ObjectId

  5. Impor Data ke Instans MongoDB yang Baru Anda Buat