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

MongoDB $ strLenBytes

MongoDB, $strLenBytes toán tử đường ống tổng hợp trả về số byte được mã hóa UTF-8 trong chuỗi được chỉ định.

Mỗi ký tự trong một chuỗi có thể chứa một số byte khác nhau, tùy thuộc vào ký tự được sử dụng. $strLenBytes toán tử có thể tìm ra bao nhiêu byte mỗi ký tự chứa và trả về kết quả chính xác cho toàn bộ 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 $strLenBytes vào trường dữ liệu trong các tài liệu đó:

 db.english.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$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ừ có 8 byte và mỗi ký tự là 1 byte.

Các ký tự tiếng 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ự là 3 byte.

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 $strLenBytes đối với các tài liệu đó:

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

Kết quả:

 {"data":"ไม้ เมือง", "result":24} {"data":"ไ", "result":3} {"data":"ม้", "result":6} { "data":"เ", "result":3} {"data":"มื", "result":6} {"data":"อ", "result":3} {"data":" ง "," kết quả ":3} 

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 6 byte được trả về.

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 $strLenBytes đối với các tài liệu đó:

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

Kết quả:

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

Hai ký tự đầu tiên là 2 byte và ký tự thứ ba là 3 byte. Số lượng byte phụ thuộc vào ký tự. Một số ký tự có thể sử dụng 4 byte.

Ký tự khoảng trắng sử dụng một byte. Do đó, hai ký tự khoảng trắng sử dụng 2 byte, 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 $strLenBytes đối với các tài liệu đó:

 db.other.aggregate(
   [
     { $match: { _id: { $in: [ 4, 5 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$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 $strLenBytes vào tài liệu đó:

 db.other.aggregate(
   [
     { $match: { _id: { $in: [ 6 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$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 $strLenBytes vào tài liệu đó:

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

Kết quả:

 Lỗi:lệnh không thành công:{"ok":0, "errmsg":"$ strLenBytes yêu cầu đối số chuỗi, tìm thấy:double", "mã":34473, "codeName":"Location34473"}: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 

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 $strLenBytes vào tài liệu đó:

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

Kết quả:

 không có ngoại lệ:Lỗi:lệnh không thành công:{"ok":0, "errmsg":"$ strLenBytes yêu cầu đối số chuỗi, tìm thấy:null", "mã":34473, "codeName":"Location34473"}: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 

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 $strLenBytes :

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

Kết quả:

 Lỗi:lệnh không thành công:{"ok":0, "errmsg":"$ strLenBytes yêu cầu đối số chuỗi, tìm thấy:thiếu", "mã":34473, "codeName":"Location34473"}: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. Nối một chuỗi vào cuối trường hiện có trong MongoDB

  2. error:tham số kiểu `D` phải được sử dụng làm tham số kiểu cho một số kiểu cục bộ

  3. MongoDB $ asinh

  4. Tự động kiểm tra cấu hình cơ sở dữ liệu

  5. Chỉ truy xuất phần tử được truy vấn trong một mảng đối tượng trong bộ sưu tập MongoDB