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 Integer
và 64-Bit Integer
. Chúng có thể được biểu diễn theo hai cách được mô tả trong bảng dưới đây, number
và alias
:
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.
-
Date()
- trả về một chuỗi -
new Date()
- trả về một đối tượng ngày tháng bằng cách sử dụngISODate()
trình bao bọc -
ISODate()
- cũng trả về một đối tượng ngày tháng bằng cách sử dụngISODate()
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ủaObjectId
có thể truy cập bằngObjectId.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.