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

Giới thiệu về kiểu dữ liệu MongoDB


Giới thiệu

Khi sử dụng MongoDB, bạn có khả năng linh hoạt với cấu trúc dữ liệu của mình. Bạn không bị khóa trong việc duy trì một lược đồ nhất định mà tất cả các tài liệu của bạn phải phù hợp. Đối với bất kỳ trường nhất định nào trong tài liệu, bạn có thể sử dụng bất kỳ kiểu dữ liệu nào có sẵn được hỗ trợ bởi MongoDB. Bất chấp cách làm việc mặc định này, bạn có thể áp đặt một Lược đồ JSON trong MongoDB để thêm xác thực vào các bộ sưu tập của mình nếu muốn. Chúng tôi sẽ không đi vào chi tiết về thiết kế giản đồ trong hướng dẫn này, nhưng nó có thể ảnh hưởng đến việc nhập dữ liệu nếu được triển khai.

Các kiểu dữ liệu chỉ định một mẫu chung cho dữ liệu mà chúng chấp nhận và lưu trữ. Điều tối quan trọng là phải hiểu khi nào nên chọn một kiểu dữ liệu nhất định thay vì một kiểu dữ liệu khác khi lập kế hoạch cho cơ sở dữ liệu của bạn. Loại được chọn sẽ quyết định cách bạn có thể thao tác trên dữ liệu của mình và cách nó được lưu trữ.



JSON và BSON

Trước khi đi vào chi tiết của các loại dữ liệu cụ thể, điều quan trọng là phải hiểu về cách MongoDB lưu trữ dữ liệu. MongoDB và nhiều cơ sở dữ liệu NoSQL dựa trên tài liệu khác sử dụng JSON (JavaScript Object Notation) để biểu diễn các bản ghi dữ liệu dưới dạng tài liệu.

Có rất nhiều lợi thế khi sử dụng JSON để lưu trữ dữ liệu. Một số trong số đó là:

  • tính dễ đọc, dễ học và tính quen thuộc của nó đối với các nhà phát triển
  • tính linh hoạt trong định dạng, cho dù thưa thớt, phân cấp hay lồng ghép sâu sắc
  • tự mô tả, cho phép các ứng dụng dễ dàng hoạt động với dữ liệu JSON
  • cho phép tập trung vào một số loại cơ bản tối thiểu

JSON hỗ trợ tất cả các kiểu dữ liệu cơ bản như chuỗi, số, boolean, v.v. MongoDB thực sự lưu trữ các bản ghi dữ liệu dưới dạng tài liệu JSON được mã hóa nhị phân (BSON). Giống như JSON, BSON hỗ trợ nhúng tài liệu và mảng trong các tài liệu và mảng khác. BSON cho phép các kiểu dữ liệu bổ sung không có sẵn cho JSON.



Các kiểu dữ liệu trong MongoDB là gì?

Trước khi đi vào chi tiết, hãy cùng xem xét những loại dữ liệu nào được hỗ trợ trong MongoDB.

MongoDB hỗ trợ một loạt các kiểu dữ liệu phù hợp với nhiều loại dữ liệu cả đơn giản và phức tạp. Chúng bao gồm:

Văn bản

  • String

Số

  • 32-Bit Integer
  • 64-Bit Integer
  • Double
  • Decimal128

Ngày / giờ

  • Date
  • Timestamp

Khác

  • Object
  • Array
  • Binary Data
  • ObjectId
  • Boolean
  • Null
  • Regular Expression
  • JavaScript
  • Min Key
  • Max Key

Trong MongoDB, mỗi loại BSON có cả số nhận dạng chuỗi và số nguyên. Chúng tôi sẽ đề cập sâu hơn những điểm chung nhất trong số này trong suốt hướng dẫn này.



Loại chuỗi

Kiểu chuỗi là kiểu dữ liệu MongoDB được sử dụng phổ biến nhất. Bất kỳ giá trị nào được viết bên trong dấu ngoặc kép "" trong JSON là một giá trị chuỗi. Bất kỳ giá trị nào bạn muốn được lưu trữ dưới dạng văn bản sẽ được nhập tốt nhất dưới dạng String . Các chuỗi BSON là UTF-8 và được biểu diễn trong MongoDB dưới dạng:

        Type         | Number |  Alias   |  ------------------ | ------ | -------- |       String        |    2   | "string" |

Nói chung, trình điều khiển cho ngôn ngữ lập trình sẽ chuyển đổi từ định dạng chuỗi của ngôn ngữ thành UTF-8 khi tuần tự hóa và giải mã BSON. Điều này làm cho BSON trở thành một phương pháp hấp dẫn để lưu trữ các ký tự quốc tế một cách dễ dàng chẳng hạn.

Chèn tài liệu với String kiểu dữ liệu sẽ giống như sau:

db.mytestcoll.insertOne({first_name: "Alex"}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d15")}

Truy vấn bộ sưu tập sẽ trả về như sau:

db.mytestcoll.find().pretty(){        _id: ObjectId("614b37296a124db40ae74d15"),         first_name: "Alex"}

Sử dụng $type toán tử

Trước khi chuyển sang kiểu dữ liệu tiếp theo của chúng tôi, điều quan trọng là phải biết cách bạn có thể nhập, kiểm tra giá trị trước khi thực hiện bất kỳ lần chèn nào. Chúng tôi sẽ sử dụng ví dụ trước để chứng minh bằng cách sử dụng $type toán tử trong MongoDB.

Giả sử đã lâu rồi kể từ khi chúng tôi làm việc với mytestcoll bộ sưu tập từ trước đó. Chúng tôi muốn chèn một số tài liệu bổ sung vào bộ sưu tập với first_name đồng ruộng. Để kiểm tra xem chúng tôi đã sử dụng String làm kiểu dữ liệu được lưu trữ dưới dạng giá trị của first_name ban đầu, chúng tôi có thể chạy như sau bằng cách sử dụng giá trị bí danh hoặc số của kiểu dữ liệu:

db.mytestcoll.find( { "first_name": { $type: "string" } } )

Hoặc

db.mytestcoll.find( { "first_name": { $type: 2 } } )

Cả hai truy vấn đều trả về kết quả đầu ra của tất cả các tài liệu có String giá trị được lưu trữ cho first_name từ chèn phần trước của chúng tôi:

[ { _id: ObjectId("614b37296a124db40ae74d15"), first_name: "Alex" } ]

Nếu bạn truy vấn một loại không được lưu trữ trong first_name trường của bất kỳ tài liệu nào, bạn sẽ không nhận được kết quả. Điều này cho thấy rằng đó là một kiểu dữ liệu khác được lưu trữ trong first_name .

Bạn cũng có thể truy vấn nhiều kiểu dữ liệu cùng một lúc với $type toán tử như sau:

db.mytestcoll.find( { "first_name": { $type: ["string", "null"] } } )

Bởi vì chúng tôi đã không chèn bất kỳ Null nào nhập các giá trị vào bộ sưu tập của chúng tôi, kết quả sẽ giống nhau:

[ { _id: ObjectId("614b37296a124db40ae74d15"), first_name: "Alex" } ]

Bạn có thể sử dụng cùng một phương pháp với tất cả các loại mà chúng ta sẽ thảo luận sau đây.




Số và giá trị số

MongoDB bao gồm một loạt các kiểu dữ liệu số phù hợp với các tình huống khác nhau. Quyết định loại nào sẽ sử dụng phụ thuộc vào bản chất của các giá trị bạn định lưu trữ và các trường hợp sử dụng của bạn cho dữ liệu. JSON gọi bất kỳ thứ gì có số là Số . Điều đó buộc hệ thống phải tìm ra cách biến nó thành kiểu dữ liệu gốc gần nhất. Chúng ta sẽ bắt đầu bằng cách khám phá các số nguyên và cách chúng hoạt động trong MongoDB.


Số nguyên

Integer kiểu dữ liệu được sử dụng để lưu trữ số dưới dạng số nguyên mà không có bất kỳ phân số hoặc số thập phân nào. Số nguyên có thể là giá trị dương hoặc âm. Có hai loại trong MongoDB, 32-Bit Integer64-Bit Integer . Chúng có thể được biểu diễn theo hai cách được mô tả trong bảng dưới đây, numberalias :

  Integer type   | number |    alias     |   ------------   | -----  | ------------ |  `32-bit integer`|   16   |    "int"     | `64-bit integer`|   18   |    "long"    |

Các phạm vi mà giá trị có thể phù hợp với từng loại như sau:

  Integer type   |    Applicable signed range     |    Applicable unsigned range    |  ------------   | ------------------------------ | ------------------------------- | `32-bit integer`| -2,147,483,648 to 2,147,483,647|  0 to 4,294,967,295             | `64-bit integer`| -9,223,372,036,854,775,808 to  |  0 to 18,446,744,073,709,551,615                         9,223,372,036,854,775,807

Các loại trên bị giới hạn bởi phạm vi hợp lệ của chúng. Bất kỳ giá trị nào nằm ngoài phạm vi sẽ dẫn đến lỗi. Chèn Integer gõ vào MongoDB sẽ giống như sau:

db.mytestcoll.insertOne({age: 26}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d14")}

Và tìm kết quả sẽ trả về như sau:

db.mytestcoll.find().pretty(){        _id: ObjectId("614b37296a124db40ae74d14"), age: 26}

Như được đề xuất bởi các tên, 32-Bit Integer có 32 bit độ chính xác số nguyên, rất hữu ích cho các giá trị số nguyên nhỏ hơn mà bạn không muốn lưu trữ dưới dạng một chuỗi chữ số. Khi tăng kích thước số lượng, bạn có thể tăng lên đến 64-Bit Integer có độ chính xác số nguyên 64 bit và phù hợp với cùng một trường hợp sử dụng như trước đây.



Nhân đôi

Trong BSON, sự thay thế mặc định cho Số của JSON là Double loại dữ liệu. Double kiểu dữ liệu được sử dụng để lưu trữ giá trị dấu phẩy động và có thể được biểu diễn trong MongoDB như sau:

        Type         | Number |   Alias  |  ------------------ | ------ | -------- |       Double        |    1   | "double" |

Số dấu phẩy động là một cách khác để thể hiện số thập phân, nhưng không có độ chính xác nhất quán, chính xác.

Số dấu phẩy động có thể hoạt động với một số lượng lớn các số thập phân một cách hiệu quả nhưng không phải lúc nào cũng chính xác. Sau đây là ví dụ về cách nhập tài liệu bằng Double nhập vào bộ sưu tập của bạn:

db.mytestcoll.insertOne({testScore: 89.6}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d13")}

Có thể có sự khác biệt nhỏ giữa đầu vào và đầu ra khi tính toán với giá trị nhân đôi có thể dẫn đến hành vi không mong muốn. Khi thực hiện các thao tác yêu cầu giá trị chính xác, MongoDB có kiểu chính xác hơn.



Decimal128

Nếu bạn đang làm việc với các số rất lớn với nhiều dải dấu phẩy động, thì Decimal128 Kiểu dữ liệu BSON sẽ là lựa chọn tốt nhất. Đây sẽ là loại hữu ích nhất cho các giá trị đòi hỏi nhiều độ chính xác như trong các trường hợp sử dụng liên quan đến các hoạt động tiền tệ chính xác. Decimal128 loại được biểu thị là:

        Type         | Number |   Alias   |  ------------------ | ------ | --------- |      Decimal128     |   19   | "decimal" |

Loại BSON, Decimal128 , cung cấp 128 bit biểu diễn thập phân để lưu trữ các số trong đó việc làm tròn số thập phân một cách chính xác là rất quan trọng. Decimal128 hỗ trợ độ chính xác 34 chữ số thập phân hoặc sinificand với phạm vi từ -6143 đến +6144. Điều này cho phép độ chính xác cao.

Chèn giá trị bằng Decimal128 kiểu dữ liệu yêu cầu sử dụng NumberDecimal() phương thức khởi tạo với số của bạn dưới dạng String để ngăn MongoDB sử dụng kiểu số mặc định, Double .

Ở đây, chúng tôi chứng minh điều này:

db.mytestcoll.insertOne({price : NumberDecimal("5.099")}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d12")}

Khi truy vấn bộ sưu tập, bạn sẽ nhận được kết quả sau:

db.mytestcoll.find().pretty(){        _id: ObjectId("614b37296a124db40ae74d12"),         price: "5.099" }

Giá trị số duy trì độ chính xác của nó cho phép thực hiện các hoạt động chính xác. Để chứng minh Decimal128 gõ so với Double , chúng ta có thể xem qua bài tập sau.



Độ chính xác có thể bị mất dựa trên loại dữ liệu như thế nào

Giả sử chúng tôi muốn chèn một số có nhiều giá trị thập phân dưới dạng Double vào MongoDB với như sau:

db.mytestcoll.insertOne({ price: 9999999.4999999999 }){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d24")}

Khi chúng tôi truy vấn dữ liệu này, chúng tôi nhận được kết quả sau:

db.mytestcoll.find().pretty(){        _id: ObjectId("614b37296a124db40ae74d24"),         price: 9999999.5}

Giá trị này làm tròn đến 9999999.5 , làm mất giá trị chính xác mà chúng tôi đã nhập vào. Điều này làm cho Double không phù hợp để lưu trữ các số có nhiều số thập phân.

Ví dụ tiếp theo cho thấy độ chính xác sẽ bị mất khi truyền Double ngầm định với Decimal128 thay vì String như trong ví dụ trước.

Chúng tôi bắt đầu bằng cách chèn Double sau lại nhưng với NumberDecimal() để biến nó thành Decimal128 loại:

db.mytestcoll.insertOne({ price: NumberDecimal( 9999999.4999999999 ) }){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d14")}

Lưu ý :Khi thực hiện chèn này trong MongoDB shell, thông báo cảnh báo sau sẽ được hiển thị:

Warning: NumberDecimal: specifying a number as argument is deprecated and may lead to loss of precision, pass a string instead

Thông báo cảnh báo này cho biết rằng số bạn đang cố gắng vượt qua có thể bị mất độ chính xác. Họ đề xuất sử dụng String sử dụng NumberDecimal() để bạn không bị mất bất kỳ độ chính xác nào.

Nếu chúng tôi bỏ qua cảnh báo và chèn tài liệu vào bất cứ lúc nào, thì kết quả truy vấn sẽ mất đi độ chính xác do làm tròn giá trị:

db.mytestcoll.find().pretty(){        _id: ObjectId("614b37296a124db40ae74d14"),         price: Decimal128("9999999.50000000")}

Nếu chúng tôi tuân theo NumberDecimal() được khuyến nghị cách tiếp cận bằng cách sử dụng String chúng ta sẽ thấy các kết quả sau với độ chính xác được duy trì:

db.mytestcoll.insertOne({ price: NumberDecimal( "9999999.4999999999" ) } )
db.mytestcoll.find().pretty(){        _id: ObjectId("614b37296a124db40ae74d14"),         price: Decimal128("9999999.4999999999")}

Đối với bất kỳ trường hợp sử dụng nào yêu cầu các giá trị chính xác, chính xác, giá trị trả về này có thể gây ra sự cố. Bất kỳ công việc nào liên quan đến hoạt động tiền tệ là một ví dụ trong đó độ chính xác sẽ là cực kỳ quan trọng và việc có các giá trị chính xác là rất quan trọng để tính toán chính xác. Phần trình bày này nêu bật tầm quan trọng của việc biết loại dữ liệu số nào sẽ phù hợp nhất cho dữ liệu của bạn.




Ngày

BSON Date kiểu dữ liệu là một số nguyên 64 bit đại diện cho số mili giây kể từ kỷ nguyên Unix (ngày 1 tháng 1 năm 1970). Kiểu dữ liệu này lưu trữ ngày hoặc giờ hiện tại và có thể được trả về dưới dạng một đối tượng ngày tháng hoặc dưới dạng một chuỗi. Date được biểu diễn trong MongoDB như sau:

        Type         | Number |     Alias    |  ------------------ | ------ | ------------ |        Date         |    9   |     "date"   |

Lưu ý :BSON Date loại được ký. Giá trị âm đại diện cho các ngày trước năm 1970.

Có ba phương pháp để trả về giá trị ngày tháng.

  1. Date() - trả về một chuỗi

  2. new Date() - trả về một đối tượng ngày tháng bằng cách sử dụng ISODate() trình bao bọc

  3. ISODate() - cũng trả về một đối tượng ngày tháng bằng cách sử dụng ISODate() trình bao bọc

Chúng tôi trình bày các tùy chọn này bên dưới:

var date1 = Date()var date2 = new Date()var date3 = ISODate()db.mytestcoll.insertOne({firstDate: date1, secondDate: date2, thirdDate: date3}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d22")}

Và khi trở lại:

db.mytestcoll.find().pretty(){                "_id" : ObjectId("614b37296a124db40ae74d22"),                firstDate: 'Tue Sep 28 2021 11:28:52 GMT+0200 (Central European Summer Time)',                secondDate: ISODate("2021-09-28T09:29:01.924Z"),                thirdDate: ISODate("2021-09-28T09:29:12.151Z")}


Dấu thời gian

Ngoài ra còn có Timestamp kiểu dữ liệu trong MongoDB để biểu diễn thời gian. Tuy nhiên, Timestamp sẽ hữu ích nhất cho việc sử dụng nội bộ và thì không được liên kết với Date gõ phím. Bản thân kiểu là một chuỗi các ký tự được sử dụng để mô tả ngày và giờ khi một sự kiện xảy ra. Timestamp là một giá trị 64 bit trong đó:

  • 32 bit quan trọng nhất là time_t giá trị (giây kể từ kỷ nguyên Unix)
  • 32 bit quan trọng nhất là ordinal tăng dần cho các hoạt động trong một giây nhất định

Biểu diễn của nó trong MongoDB sẽ như sau:

        Type         | Number |     Alias    |  ------------------ | ------ | ------------ |      Timestamp      |   17   |  "timestamp" |

Khi chèn tài liệu chứa các trường cấp cao nhất có dấu thời gian trống, MongoDB sẽ thay thế giá trị dấu thời gian trống bằng giá trị dấu thời gian hiện tại. Ngoại lệ cho điều này là nếu _id trường chứa một dấu thời gian trống. Giá trị dấu thời gian sẽ luôn được chèn nguyên trạng và không bị thay thế.

Chèn Timestamp mới giá trị trong MongoDB sẽ sử dụng new Timestamp() chức năng và trông giống như sau:

db.mytestcoll.insertOne( {ts: new Timestamp() });{        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d23")}

Khi truy vấn bộ sưu tập, bạn sẽ trả về một kết quả giống như sau:

db.mytestcoll.find().pretty(){        "_id" : ObjectId("614b37296a124db40ae74d24"),         "ts" : Timestamp( { t: 1412180887, i: 1 })}


Đối tượng

Đối tượng Object kiểu dữ liệu trong MongoDB được sử dụng để lưu trữ các tài liệu nhúng. Tài liệu được nhúng là một loạt các tài liệu được lồng vào nhau trong key: value định dạng cặp. Chúng tôi chứng minh Object gõ bên dưới:

var classGrades = {"Physics": 88, "German": 92, "LitTheoery": 79}db.mytestcoll.insertOne({student_name: "John Smith", report_card: classGrades}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d18")}

Sau đó, chúng tôi có thể xem tài liệu mới của mình:

db.mytestcoll.find().pretty(){    _id: ObjectId("614b37296a124db40ae74d18"),    student_name: 'John Smith',    report_card: {Physics: 88, German: 92, LitTheoery: 79}}

Đối tượng Object kiểu dữ liệu tối ưu hóa để lưu trữ dữ liệu được truy cập cùng nhau tốt nhất. Nó cung cấp một số hiệu quả về lưu trữ, tốc độ và độ bền thay vì lưu trữ từng nhãn hiệu lớp, từ ví dụ trên, riêng biệt.



Dữ liệu nhị phân

Binary Data hoặc BinData , kiểu dữ liệu thực hiện đúng như tên gọi của nó và lưu trữ dữ liệu nhị phân cho giá trị của trường. BinData được sử dụng tốt nhất khi bạn đang lưu trữ và tìm kiếm dữ liệu, vì tính hiệu quả của nó trong việc biểu diễn các mảng bit. Loại dữ liệu này có thể được biểu diễn theo những cách sau:

        Type         | Number |     Alias    |  ------------------ | ------ | ------------ |      Binary data    |    5   |   "binData"  |

Đây là ví dụ về việc thêm một số Binary data vào một tài liệu trong bộ sưu tập:

var data = BinData(1, "111010110111100110100010101")db.mytestcoll.insertOne({binaryData: data}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d20")}

Để xem tài liệu kết quả sau đó:

db.mytestcoll.find().pretty(){        "_id" : ObjectId("614b37296a124db40ae74d20"),        "binaryData" : BinData(1, "111010110111100110100010101")}


ObjectId

ObjectId loại dành riêng cho MongoDB và nó lưu trữ ID duy nhất của tài liệu. MongoDB cung cấp một _id trường cho mọi tài liệu. ObjectId có kích thước 12 byte và có thể được biểu diễn như sau:

        Type         | Number |     Alias    |  ------------------ | ------ | ------------ |      ObjectId       |    7   |   "objectId" |

ObjectId bao gồm ba phần tạo nên trang điểm 12 byte của nó:

  • một giá trị dấu thời gian 4 byte , đại diện cho việc tạo ObjectId, được tính bằng giây kể từ kỷ nguyên Unix
  • một giá trị ngẫu nhiên 5 byte
  • một bộ đếm tăng dần 3 byte được khởi tạo thành một giá trị ngẫu nhiên

Trong MongoDB, mỗi tài liệu trong bộ sưu tập yêu cầu một _id duy nhất để hoạt động như một khóa chính. Nếu _id trường được để trống cho tài liệu được chèn, MongoDB sẽ tự động tạo một ObjectId cho trường.

Có một số lợi ích khi sử dụng ObjectIds cho _id :

  • trong mongosh (MongoDB shell), thời gian tạo của ObjectId có thể truy cập bằng ObjectId.getTimestamp() phương pháp.
  • sắp xếp trên một _id trường lưu trữ ObjectId kiểu dữ liệu gần giống với sắp xếp theo thời gian tạo.

Chúng tôi đã thấy các ObjectIds trong suốt các ví dụ cho đến nay và chúng sẽ trông tương tự như sau:

db.mytestcoll.find().pretty(){         _id: ObjectId("614b37296a124db40ae74d19")}

Lưu ý :Các giá trị ObjectId sẽ tăng theo thời gian, tuy nhiên chúng không nhất thiết phải là đơn điệu. Điều này là do họ:

  • Chỉ chứa một giây độ phân giải tạm thời, vì vậy các giá trị được tạo trong cùng một giây không có thứ tự đảm bảo
  • các giá trị được tạo bởi máy khách, có thể có đồng hồ hệ thống khác nhau


Boolean

MongoDB có Boolean gốc kiểu dữ liệu để lưu trữ các giá trị đúng và sai trong một tập hợp. Boolean trong MongoDB có thể được biểu diễn như sau:

        Type         | Number |     Alias    |  ------------------ | ------ | ------------ |       Boolean       |    8   |     "bool"   |

Chèn tài liệu có Boolean kiểu dữ liệu sẽ giống như sau:

db.mytestcoll.insertOne({isCorrect: true, isIncorrect: false}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d21")}

Sau đó, khi tìm kiếm tài liệu, kết quả sẽ xuất hiện dưới dạng:

db.mytestcoll.find().pretty(){    "_id" : ObjectId("614b37296a124db40ae74d21")    "isCorrect" : true,    "isIncorrect" : false}


Biểu thức chính quy

Regular Expression kiểu dữ liệu trong MongoDB cho phép lưu trữ các biểu thức chính quy dưới dạng giá trị của một trường. MongoDB sử dụng PCRE (Biểu thức chính quy tương thích Perl) làm ngôn ngữ biểu thức chính quy.

Nó có thể được biểu diễn theo cách sau:

        Type         | Number |  Alias  |  ------------------ | ------ | ------- |  Regular Expression |   11   | "regex" |

BSON cho phép bạn tránh bước "chuyển đổi từ chuỗi" điển hình thường gặp khi làm việc với biểu thức chính quy và cơ sở dữ liệu. Loại này sẽ hữu ích nhất khi bạn đang viết các đối tượng cơ sở dữ liệu yêu cầu các mẫu xác thực hoặc trình kích hoạt phù hợp.

Ví dụ:bạn có thể chèn Regular Expression kiểu dữ liệu như thế này:

db.mytestcoll.insertOne({exampleregex: /tt/}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d16")}db.mytestcoll.insertOne({exampleregext:/t+/}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d17")}

Chuỗi câu lệnh này sẽ thêm những tài liệu này vào bộ sưu tập của bạn. Sau đó, bạn có thể truy vấn bộ sưu tập của mình để tìm các tài liệu được chèn:

db.mytestcoll.find().pretty(){        _id: ObjectId("614b37296a124db40ae74d16"), exampleregex: /tt/,        _id: ObjectId("614b37296a124db40ae74d17"), exampleregex: /t+/ }

Các mẫu biểu thức chính quy được lưu trữ dưới dạng regex chứ không phải dưới dạng chuỗi. Điều này cho phép bạn truy vấn một chuỗi cụ thể và nhận các tài liệu trả về có biểu thức chính quy khớp với chuỗi mong muốn.



JavaScript (không có phạm vi)

Giống như Regular Expression đã đề cập trước đây kiểu dữ liệu, BSON cho phép MongoDB lưu trữ các hàm JavaScript không có phạm vi như kiểu riêng của chúng. JavaScript loại có thể được nhận dạng như sau:

        Type         | Number |     Alias    |  ------------------ | ------ | ------------ |      JavaScript     |   13   | "javascript" |

Thêm tài liệu vào bộ sưu tập của bạn bằng JavaScript kiểu dữ liệu sẽ giống như sau:

db.mytestcoll.insertOne({jsCode: "function(){var x; x=1}"}){        "acknowledged": true,        "insertedId": ObjectId("614b37296a124db40ae74d122")}

Chức năng này cho phép bạn lưu trữ các hàm JavaScript bên trong bộ sưu tập MongoDB của mình nếu cần cho một trường hợp sử dụng cụ thể.

Lưu ý :Với MongoDB phiên bản 4.4 trở lên, một loại JavaScript thay thế, JavaScript with Scope kiểu dữ liệu, không được dùng nữa



Kết luận

Trong bài viết này, chúng tôi đã đề cập đến hầu hết các kiểu dữ liệu phổ biến hữu ích khi làm việc với cơ sở dữ liệu MongoDB. Có những loại bổ sung không được đề cập rõ ràng trong hướng dẫn này có thể hữu ích tùy thuộc vào trường hợp sử dụng. Bắt đầu bằng cách biết những loại này bao gồm hầu hết các trường hợp sử dụng. Đây là nền tảng vững chắc để bắt đầu lập mô hình cơ sở dữ liệu MongoDB của bạn.

Điều quan trọng là phải biết những kiểu dữ liệu nào có sẵn cho bạn khi sử dụng cơ sở dữ liệu để bạn đang sử dụng các giá trị hợp lệ và thao tác trên dữ liệu với kết quả mong đợi. Có những rủi ro mà bạn có thể gặp phải nếu không nhập đúng cách dữ liệu của mình như được trình bày trong Double so với Decimal128 bài tập. Điều quan trọng là phải suy nghĩ về điều này trước khi cam kết với bất kỳ loại hình cụ thể nào.

Nếu bạn muốn kiểm tra Prisma với cơ sở dữ liệu MongoDB, bạn có thể xem tài liệu về trình kết nối dữ liệu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tìm giá trị không chứa số trong SQL

  2. Khoảng cách in MongoDB giữa hai điểm

  3. MongoDB updateOne ()

  4. Chọn bản ghi phù hợp với giá trị concat của hai trường trong mongodb

  5. 5 cách để có được những phút mỗi ngày trong MongoDB