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 :example@sqldat.com/mongo/shell/utils.js:25:13example@sqldat.com/mongo/shell/assert.js:18:14example@sqldat.com/mongo/shell/assert.js:639 :17example@sqldat.com/mongo/shell/assert.js:729:16example@sqldat.com/mongo/shell/db.js:266:5example@sqldat.com/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 :example@sqldat.com/mongo/shell/utils.js:25:13example@sqldat.com/mongo/shell/assert.js:18:14example@sqldat.com/mongo/shell/assert.js:639:17example@ sqldat.com/mongo/shell/assert.js:729:16example@sqldat.com/mongo/shell/db.js:266:5example@sqldat.com/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 :example@sqldat.com/mongo/shell/utils.js:25:13example@sqldat.com/mongo/shell/assert.js:18:14example@sqldat.com/mongo/shell/assert.js:639:17example@ sqldat.com/mongo/shell/assert.js:729:16example@sqldat.com/mongo/shell/db.js:266:5example@sqldat.com/mongo/shell/collection.js:1058:12@(shell )::1:1