MongoDB, $strLenCP
toán tử đường ống tổng hợp trả về số điểm mã UTF-8 trong chuỗi được chỉ định.
$strLenCP
toán tử khác với $strLenBytes
toán tử, trả về số byte trong chuỗi.
Ví dụ
Giả sử chúng ta có một bộ sưu tập có tên là english
với các tài liệu sau:
{"_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"}
Chúng tôi có thể áp dụng $strLenCP
vào trường dữ liệu trong các tài liệu đó:
db.english.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
Kết quả:
{"data":"Maimuang", "result":8} {"data":"M", "result":1} {"data":"a", "result":1} {" data ":" i "," result ":1} {" data ":" m "," result ":1} {" data ":" u "," result ":1} {" data ":" a "," kết quả ":1} {" dữ liệu ":" n "," kết quả ":1} {" dữ liệu ":" g "," kết quả ":1}
Chúng ta có thể thấy rằng toàn bộ từ sử dụng 8 điểm mã và mỗi ký tự sử dụng một điểm mã.
Ký tự Thái
Dưới đây là một ví dụ sử dụng các ký tự tiếng Thái, mỗi ký tự 3 byte nhưng chỉ sử dụng một điểm mã.
Chúng tôi có một bộ sưu tập có tên là thai
với các tài liệu sau:
{"_id":1, "data":"ไม้ เมือง"} {"_id":2, "data":"ไ"} {"_id":3, "data":"ม้"} { "_id":4, "data":"เ"} {"_id":5, "data":"มื"} {"_id":6, "data":"อ"} {"_id":7 , "data":"ง"}
Và đây là những gì sẽ xảy ra khi chúng tôi áp dụng $strLenCP
đối với các tài liệu đó:
db.thai.aggregate ([{$ project:{_id:0, data:1, result:{$ strLenCP:"$ data"}}}])
Kết quả:
{"data":"ไม้ เมือง", "result":8} {"data":"ไ", "result":1} {"data":"ม้", "result":2} { "data":"เ", "result":1} {"data":"มื", "result":2} {"data":"อ", "result":1} {"data":" ง "," kết quả ":1}
Hai trong số các ký tự này đã được sửa đổi bằng cách sử dụng dấu phụ, dẫn đến 2 điểm mã được trả về. Các ký tự này trả về 6 byte khi sử dụng $strLenBytes
nhà điều hành.
Các nhân vật khác
Giả sử chúng ta có một bộ sưu tập được gọi là other
với các tài liệu sau:
{"_id":1, "data":"é"} {"_id":2, "data":"©"} {"_id":3, "data":"℘"}Và hãy áp dụng
$strLenCP
đối với các tài liệu đó:db.other.aggregate( [ { $match: { _id: { $in: [ 1, 2, 3 ] } } }, { $project: { _id: 0, data: 1, result: { $strLenCP: "$data" } } } ] )
Kết quả:
{"data":"é", "result":1} {"data":"©", "result":1} {"data":"℘", "result":1}Mỗi ký tự này sử dụng một điểm mã duy nhất (mặc dù các ký tự như vậy sử dụng nhiều hơn một byte).
Ký tự khoảng trắng sử dụng một điểm mã. Do đó, hai ký tự khoảng trắng sử dụng 2 điểm mã, v.v.
Giả sử chúng ta có các tài liệu sau:
{"_id":4, "data":""} {"_id":5, "data":""}Và chúng tôi áp dụng
$strLenCP
đối với các tài liệu đó:db.other.aggregate( [ { $match: { _id: { $in: [ 4, 5 ] } } }, { $project: { _id: 0, data: 1, result: { $strLenCP: "$data" } } } ] )
Kết quả:
{"data":"", "result":1} {"data":"", "kết quả":2}Chuỗi trống
Chuỗi trống trả về
0
.Đây là tài liệu có chuỗi trống:
{"_id":6, "data":""}Và đây là những gì sẽ xảy ra khi chúng tôi áp dụng
$strLenCP
vào tài liệu đó:db.other.aggregate( [ { $match: { _id: { $in: [ 6 ] } } }, { $project: { _id: 0, data: 1, result: { $strLenCP: "$data" } } } ] )
Kết quả:
{"data":"", "kết quả":0}Loại dữ liệu sai
Chuyển loại dữ liệu sai dẫn đến lỗi.
Giả sử chúng ta có tài liệu sau:
{"_id":7, "data":123}Trường dữ liệu
field
chứa một số.Hãy áp dụng
$strLenCP
vào tài liệu đó:db.other.aggregate( [ { $match: { _id: { $in: [ 7 ] } } }, { $project: { _id: 0, data: 1, result: { $strLenCP: "$data" } } } ] )
Kết quả:
không có ngoại lệ:Lỗi:lệnh không thành công:{"ok":0, "errmsg":"$ strLenCP yêu cầu đối số chuỗi, tìm thấy:double", "mã":34471, "codeName":"Location34471"}:tổng hợp không thành công:[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 @ (shell):1:1Giá trị rỗng
Cung cấp
null
cũng dẫn đến lỗi.Giả sử chúng ta có tài liệu sau:
{"_id":8, "data":null}Trường dữ liệu
field
chứanull
.Hãy áp dụng
$strLenCP
vào tài liệu đó:db.other.aggregate( [ { $match: { _id: { $in: [ 8 ] } } }, { $project: { _id: 0, data: 1, result: { $strLenCP: "$data" } } } ] )
Kết quả:
Lỗi:lệnh không thành công:{"ok":0, "errmsg":"$ strLenCP yêu cầu đối số chuỗi, tìm thấy:null", "mã":34471, "codeName":"Location34471"}:tổng hợp không thành công:[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:1Các trường bị thiếu
Tiếp tục với chủ đề tạo ra lỗi, việc chỉ định trường không tồn tại cũng tạo ra lỗi.
Tài liệu:
{"_id":9}Áp dụng
$strLenCP
:db.other.aggregate( [ { $match: { _id: { $in: [ 9 ] } } }, { $project: { _id: 0, data: 1, result: { $strLenCP: "$data" } } } ] )
Kết quả:
Lỗi:lệnh không thành công:{"ok":0, "errmsg":"$ strLenCP yêu cầu đối số chuỗi, tìm thấy:thiếu", "mã":34471, "codeName":"Location34471"}:tổng hợp không thành công:[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