MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ strLenCP

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:1 

Giá 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ứa null .

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:1 

Cá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 

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose Đang cố gắng mở kết nối chưa được đóng kín

  2. Mongo chỉ mục duy nhất không phân biệt chữ hoa chữ thường

  3. hiển thị dbs cho biết lỗi lệnh Không được phép thực thi

  4. Trường được tạo tự động cho MongoDB bằng Spring Boot

  5. MongoDB:thiết kế tốt nhất cho ứng dụng nhắn tin