Kiểu dữ liệu trong mongodb là gì?

Khi chúng tôi lưu trữ các cặp khóa-giá trị có liên quan cùng nhau trong một tập hợp các cặp khóa-giá trị, tập hợp này được gọi là tài liệu. Dưới đây là một ví dụ về tài liệu chứa dữ liệu về một nhân viên

{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}

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

Trong tài liệu trên, bạn có thể thấy rằng chúng tôi đã lưu trữ nhiều giá trị cho một nhân viên. Điều này rất giống với cách chúng tôi lưu trữ dữ liệu trong một hàng trong RDBMS điển hình. Các tài liệu tương tự được lưu trữ cùng nhau trong một bộ sưu tập. Bạn có thể coi các bộ sưu tập tương đương với NoSQL của một bảng RDBMS với một số điểm khác biệt chính mà chúng ta sẽ không thảo luận trong bài viết này

Trong tài liệu trên, bạn có thể thấy rằng chúng tôi có 4 cặp khóa-giá trị khác nhau. Các giá trị có thể thuộc các loại khác nhau, ví dụ: trong trường hợp này, employee_name và employee_skills có các giá trị kiểu Chuỗi, employee_salary thuộc loại số và employee_status thuộc loại boolean

Có các loại dữ liệu này (và hơn thế nữa) trong MongoDB cho phép chúng tôi lưu trữ dữ liệu ở định dạng hiệu quả hơn và cũng thực hiện các truy vấn mạnh mẽ và hiệu quả cao trên dữ liệu được lưu trữ

Sử dụng đúng kiểu dữ liệu để lưu trữ các trường dữ liệu trong tài liệu là rất quan trọng đối với sự thành công của hệ thống cơ sở dữ liệu. Dưới đây là một số loại dữ liệu được sử dụng nhiều nhất có sẵn trong MongoDB

  • Sợi dây
  • số nguyên
  • Boolean
  • Kép
  • Ngày
  • Phím trộn/tối đa
  • Mảng
  • dấu thời gian
  • Sự vật
  • Vô giá trị
  • Biểu tượng
  • Biểu thức chính quy

Chúng ta sẽ xem xét tất cả những điều này với các ví dụ nhưng trước đó, hãy xem JSON và BSON để hiểu cách MongoDB lưu trữ dữ liệu

JSON và BSON

JSON là viết tắt của Ký hiệu đối tượng JavaScript. Đây là một định dạng rất phổ biến được sử dụng bởi các API và dịch vụ web để trả lại dữ liệu cho khách hàng. Định dạng này được sử dụng rộng rãi vì tính đơn giản và dễ phân tích cú pháp. Hầu hết các ngôn ngữ lập trình hiện đại không cần lớp ứng dụng bổ sung để phân tích dữ liệu JSON

Các đối tượng JSON là các thùng chứa liên kết đơn giản, trong đó dữ liệu được lưu trữ dưới dạng một tập hợp các cặp khóa-giá trị. Trong trường hợp này, một khóa được ánh xạ tới một giá trị (có thể là một số, chuỗi, hàm hoặc thậm chí là một đối tượng khác)

MongoDB cũng lưu trữ dữ liệu dưới dạng tài liệu JSON nhưng dữ liệu JSON được mã hóa nhị phân. Điều này dẫn đến BSON. BSON chỉ đơn giản là viết tắt của JSON nhị phân. Cấu trúc nhị phân của BSON mã hóa thông tin về loại và độ dài, cho phép nó được phân tích cú pháp nhanh hơn nhiều và do đó mang lại hiệu suất tốt hơn

Tóm lại, MongoDB lưu trữ dữ liệu ở định dạng BSON cả nội bộ và qua mạng, nhưng điều đó không có nghĩa là bạn không thể coi MongoDB là cơ sở dữ liệu JSON. Mọi thứ bạn có thể trình bày trong JSON đều có thể được lưu trữ nguyên bản trong MongoDB và được truy xuất dễ dàng trong JSON

Các kiểu dữ liệu MongoDB khác nhau

Hãy cùng xem xét từng loại dữ liệu do MongoDB cung cấp với các ví dụ và hiểu các trường hợp sử dụng tốt nhất cho chúng

  • Chuỗi - Đây là một trong những kiểu dữ liệu đơn giản nhất và được sử dụng nhiều nhất. Kiểu chuỗi được sử dụng để biểu diễn văn bản một cách đơn giản. Các chuỗi trong BSON là UTF-8 cho phép chúng tôi biểu thị hầu hết các ký tự quốc tế trong chuỗi BSON mà không gặp bất kỳ sự cố nào. Dưới đây là một số ví dụ về giá trị chuỗi trong tài liệu
{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}

Tài liệu trên có hai khóa có giá trị kiểu String. Cụ thể, employee_name và employee_skills có các giá trị Chuỗi. Đây là những giá trị đơn giản nhất và được sử dụng để đại diện cho một loạt các ký tự

  • Số nguyên - Kiểu dữ liệu số nguyên được sử dụng để lưu trữ các giá trị số. Nó có thể lưu trữ các số nguyên 32 bit hoặc 64 bit tùy thuộc vào máy chủ. Dưới đây là một ví dụ về một số nguyên được lưu trữ trong một tài liệu
{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}

Khóa employee_salary lưu trữ một giá trị số và do đó nó thuộc kiểu số nguyên

  • Double - Kiểu dữ liệu double được sử dụng để lưu trữ các giá trị số với dấu phẩy động 8 byte (64-bit IEEE 754 floating point). Dưới đây là ví dụ về tài liệu chứa giá trị kép trong trường employee_score
{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_score":  97.67,
"employee_status":  true,
}
  • Boolean - Kiểu dữ liệu boolean được sử dụng để lưu trữ các giá trị boolean (true hoặc false). Trong ví dụ bên dưới, bạn có thể thấy rằng trường employee_status lưu trữ giá trị true, do đó trường này thuộc loại boolean
{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_score":  97.67,
"employee_status":  true,
}

Booleans sử dụng ít bộ nhớ hơn một số nguyên hoặc chuỗi và tránh mọi tác dụng phụ không mong muốn của việc so sánh

  • Mảng - Mảng được sử dụng để lưu trữ nhiều giá trị cùng loại dưới một khóa duy nhất. Đây là một ví dụ về một mảng được lưu trữ trong một tài liệu
{
"employee_name":  "John Doe",
"employee_skills":  ["UI Design", "Graphic Design", "2D Animation"],
"employee_score":  97.67,
"employee_status":  true,
}

Trong ví dụ trên, trường employee_skills chứa một mảng kiểu String trong đó mỗi giá trị trong mảng là một String

Đây là một ví dụ khác trong đó thay vì một mảng thuộc loại đơn giản (Chuỗi), các tài liệu được nhúng trong mảng

{
"item_code": "1234-ABCD",
"item_price": 49.99,
"item_stock": [{
"warehouse": "Warehouse A",
"qty": 1200
}, {
"warehouse": "Warehouse B",
"qty": 900
}],
}

Trong tài liệu trên, trường item_stock chứa một mảng các tài liệu nhúng

  • Ngày - Kiểu dữ liệu ngày được sử dụng để lưu trữ ngày và giờ ở định dạng thời gian Unix. Dấu thời gian Unix có thể dễ dàng chuyển đổi sang và từ đối tượng Ngày JavaScript. Ngày 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). Điều này dẫn đến một phạm vi ngày có thể biểu thị được khoảng 290 triệu năm trong quá khứ và tương lai

Dưới đây là một ví dụ về cách một ngày được lưu trữ trong một tài liệu

{
"student_name": "Bob Stan",
"student_dob": ISODate("2006-02-10T10:50:42.389Z"),
"student_marks": 78.98
}

Trong ví dụ trên, ngày được lưu trữ có thể dễ dàng được chuyển đổi sang định dạng có thể đọc được bằng cách sử dụng JavaScript mới Date("2006-02-10T10. 50. 42. chức năng 389Z"). Nó sẽ trả về đầu ra sau

Thứ 6 ngày 10 tháng 2 năm 2006 16. 20. 42 GMT+0530 (Giờ chuẩn Ấn Độ)

Trong nội bộ, các đối tượng Ngày được lưu trữ dưới dạng số nguyên 64 bit có dấu biểu thị số mili giây kể từ kỷ nguyên Unix (ngày 1 tháng 1 năm 1970).

  • Các phím Min/Max - Các phím Min và Max đều là các loại dữ liệu nội bộ. Nó được sử dụng để so sánh một giá trị với các phần tử BSON thấp nhất và cao nhất
  • Đối tượng - Loại dữ liệu này được sử dụng để lưu trữ các tài liệu được nhúng trong một tài liệu. Hãy xem một ví dụ để hiểu rõ hơn
________số 8

Trong ví dụ trên, trường item_dimensions là một tài liệu được nhúng vì nó chứa tập hợp các cặp khóa-giá trị riêng. Do đó, trường này thuộc loại Đối tượng

  • Dấu thời gian - Loại dấu thời gian là một loại đặc biệt để sử dụng MongoDB nội bộ và không được liên kết với loại Ngày thông thường. Loại dấu thời gian nội bộ này là một giá trị 64 bit trong đó 32 bit quan trọng nhất là giây kể từ kỷ nguyên Unix và 32 bit ít quan trọng nhất là thứ tự tăng dần cho các hoạt động trong một giây nhất định

Đây là cách giá trị dấu thời gian trông như thế nào trong tài liệu khi nó được truy vấn

{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}
0

Kiểu dữ liệu dấu thời gian thường được sử dụng để theo dõi thời gian tạo/chỉnh sửa/cập nhật tài liệu. Hàm Timestamp() mới được sử dụng trong quá trình chèn và máy chủ sẽ tự động thêm dấu thời gian vào trường

  • Null - Kiểu dữ liệu null được sử dụng để lưu trữ các giá trị null hoặc không tồn tại. Đây là cách một trường trong tài liệu có giá trị null trông như thế nào khi được truy vấn
{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}
1

Điều này cũng tương tự với tài liệu sau khi trường này hoàn toàn không có

{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}
2
  • ObjectID - Kiểu dữ liệu này được sử dụng để lưu trữ ID duy nhất của tài liệu. Không có hai tài liệu nào trong một bộ sưu tập có thể có cùng một ID đối tượng. Đó là một giá trị 12 byte chứa dấu thời gian, giá trị ngẫu nhiên và giá trị bộ đếm tăng dần, tất cả được kết hợp với nhau để tạo một ID duy nhất

Đây là một ví dụ

{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}
3

Trường _id được thêm tự động cho mọi tài liệu nếu bạn không chỉ định rõ ràng một trường với loại ObjectID

  • Nhị phân - Kiểu dữ liệu này được sử dụng để lưu trữ dữ liệu nhị phân trong một trường. Loại dữ liệu này tương ứng với loại Blob trong DBMS quan hệ. Tuy nhiên, có giới hạn 16 MB cho mỗi tài liệu trong MongoDB, vì vậy nếu dữ liệu nhị phân cộng với các trường khác có tổng kích thước nhỏ hơn 16 MB, thì dữ liệu nhị phân có thể được nhúng trong tài liệu bằng kiểu dữ liệu Nhị phân

Đây là một ví dụ

{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}
4

BinData đây là đại diện base64 của nội dung nhị phân

  • Chưa xác định - Loại dữ liệu này được sử dụng để lưu trữ giá trị chưa xác định trong một trường. Lưu ý rằng MongoDB phân biệt giữa null và không xác định nhưng trình bao chuyển cả hai thành null. Tuy nhiên, hành vi này có thể được thay đổi
{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}
5

Không xác định hiện không được dùng nữa trong MongoDB 4. 4

  • Biểu thức chính quy - Kiểu dữ liệu này được sử dụng để lưu trữ Biểu thức chính quy hoặc RegEx trong một trường. Chúng có thể được sử dụng để khớp mẫu trên các ngôn ngữ khác nhau. Đây là một ví dụ
{
"employee_name":  "John Doe",
"employee_skills":  "UI Design",
"employee_salary":  40000,
"employee_status":  true,
}
6
  • JavaScript với Phạm vi - Có thể lưu trữ một chức năng trực tiếp trong MongoDB trong một trường. Các chức năng với bao đóng cũng có thể được lưu trữ. Chúng sẽ liên kết với phạm vi của phiên MongoDB khi chúng được thực thi

Trong BSON, có hai loại khác nhau được định nghĩa cho các hàm không có bao đóng, JavaScript và một loại khác cho các hàm có bao đóng, JavaScript có Phạm vi. JavaScript với Phạm vi hiện không được dùng nữa trong MongoDB 4. 4

Vì vậy, đây là tất cả các kiểu dữ liệu quan trọng và nổi bật nhất trong MongoDB. BSON hỗ trợ nhiều kiểu dữ liệu hơn JSON. Một số kiểu dữ liệu cũ hơn và ít được sử dụng hơn sẽ bị xóa khỏi kệ hỗ trợ MongoDB và phạm vi hoặc hỗ trợ cho các kiểu mới hơn được cải thiện theo thời gian. Đây là một quá trình thường xanh

Ba loại dữ liệu trong bộ sưu tập MongoDB là gì?

Số nguyên - Loại này được sử dụng để lưu trữ một giá trị số. Số nguyên có thể là 32 bit hoặc 64 bit tùy thuộc vào máy chủ của bạn. Boolean - Loại này được sử dụng để lưu trữ giá trị boolean (true/false). Double - Loại này được sử dụng để lưu trữ các giá trị dấu phẩy động

Định dạng dữ liệu MongoDB là gì?

BSON là định dạng được sử dụng cho cả lưu trữ dữ liệu và truyền mạng trong MongoDB. Sau khi lưu trữ dữ liệu trong MongoDB, bạn có thể muốn lấy lại dữ liệu của mình dưới dạng JSON, trong số nhiều định dạng khác.

Kiểu dữ liệu cho thời gian trong MongoDB là gì?

Cách được đề xuất để lưu trữ ngày tháng trong MongoDB là sử dụng kiểu dữ liệu BSON Date . Đặc tả BSON đề cập đến loại Ngày là ngày giờ UTC và là số nguyên 64 bit. Nó đại diện cho số mili giây kể từ kỷ nguyên Unix, là 00. 00. 00 UTC ngày 1 tháng 1 năm 1970.

Loại dữ liệu nào có thể được lưu trữ trong bộ sưu tập MongoDB?

MongoDB sử dụng JSON nhị phân và MQL thay thế cho SQL. BSON cho phép các loại dữ liệu như dấu phẩy động, thời gian dài, ngày tháng và nhiều loại dữ liệu khác không được JSON thông thường hỗ trợ. MQL cung cấp các khả năng bổ sung khi so sánh với SQL thông thường, làm cho nó phù hợp hơn với MongoDB khi nó xử lý các tài liệu kiểu JSON.