1. Giới thiệu
Trong hướng dẫn này, chúng ta sẽ xem xét BSON và cách chúng ta có thể sử dụng nó để tương tác với MongoDB.
Bây giờ, mô tả chuyên sâu về MongoDB và tất cả các khả năng của nó nằm ngoài phạm vi của bài viết này. Tuy nhiên, sẽ rất hữu ích nếu bạn hiểu một vài khái niệm chính.
MongoDB là một công cụ lưu trữ tài liệu NoSQL, phân tán. Các tài liệu được lưu trữ dưới dạng dữ liệu BSON và được nhóm lại với nhau thành các bộ sưu tập. Các tài liệu trong bộ sưu tập tương tự với các hàng trong bảng cơ sở dữ liệu quan hệ .
Để có cái nhìn chuyên sâu hơn, hãy xem bài viết giới thiệu về MongoDB.
2. BSON là gì ?
BSON là viết tắt của Binary JSON . Đó là một giao thức để tuần tự hóa dữ liệu giống JSON nhị phân.
JSON là một định dạng trao đổi dữ liệu phổ biến trong các dịch vụ web hiện đại. Nó cung cấp một cách linh hoạt để biểu diễn các cấu trúc dữ liệu phức tạp.
BSON cung cấp một số lợi thế so với việc sử dụng JSON thông thường:
- Nhỏ gọn:Trong hầu hết các trường hợp, việc lưu trữ cấu trúc BSON yêu cầu ít dung lượng hơn so với JSON tương đương của nó
- Loại dữ liệu: BSON cung cấp các loại dữ liệu bổ sung không được tìm thấy trong JSON thông thường, chẳng hạn như Ngày và BinData
Một trong những lợi ích chính của việc sử dụng BSON là dễ dàng di chuyển . Tài liệu BSON chứa siêu dữ liệu bổ sung cho phép thao tác dễ dàng các trường của tài liệu mà không cần phải đọc toàn bộ tài liệu.
3. Trình điều khiển MongoDB
Bây giờ chúng ta đã có hiểu biết cơ bản về BSON và MongoDB, hãy cùng nhau xem xét cách sử dụng chúng. Chúng tôi sẽ tập trung vào các hành động chính từ từ viết tắt CRUD ( C reate, R ead, U pdate, D elete).
MongoDB cung cấp trình điều khiển phần mềm cho hầu hết các ngôn ngữ lập trình hiện đại. Trình điều khiển được xây dựng trên đầu thư viện BSON , có nghĩa là chúng tôi sẽ làm việc trực tiếp với API BSON khi xây dựng các truy vấn. Để biết thêm thông tin, hãy xem hướng dẫn của chúng tôi về ngôn ngữ truy vấn MongoDB.
Trong phần này, chúng ta sẽ xem xét việc sử dụng trình điều khiển để kết nối với một cụm và sử dụng API BSON để thực hiện các loại truy vấn khác nhau. Lưu ý rằng trình điều khiển MongoDB cung cấp Bộ lọc lớp có thể giúp chúng ta viết mã nhỏ gọn hơn. Tuy nhiên, đối với hướng dẫn này, chúng tôi sẽ chỉ tập trung vào việc sử dụng API BSON cốt lõi.
Để thay thế cho việc sử dụng trực tiếp trình điều khiển MongoDB và BSON, hãy xem hướng dẫn về MongoDB Dữ liệu mùa xuân của chúng tôi.
3.1. Đang kết nối
Để bắt đầu, trước tiên, chúng tôi thêm trình điều khiển MongoDB làm phụ thuộc vào ứng dụng của chúng tôi:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.10.1</version>
</dependency>
Sau đó, chúng tôi tạo kết nối đến cơ sở dữ liệu MongoDB và bộ sưu tập:
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<Document> collection = database.getCollection("employees");
Các phần còn lại sẽ xem xét việc tạo truy vấn bằng bộ sưu tập tham khảo.
3.2. Chèn
Giả sử chúng ta có JSON sau đây mà chúng ta muốn chèn làm tài liệu mới vào nhân viên bộ sưu tập:
{
"first_name" : "Joe",
"last_name" : "Smith",
"title" : "Java Developer",
"years_of_service" : 3,
"skills" : ["java","spring","mongodb"],
"manager" : {
"first_name" : "Sally",
"last_name" : "Johanson"
}
}
JSON ví dụ này hiển thị các kiểu dữ liệu phổ biến nhất mà chúng tôi sẽ gặp với tài liệu MongoDB:văn bản, số, mảng và tài liệu nhúng.
Để chèn điều này bằng BSON, chúng tôi sẽ sử dụng Tài liệu của MongoDB API:
Document employee = new Document()
.append("first_name", "Joe")
.append("last_name", "Smith")
.append("title", "Java Developer")
.append("years_of_service", 3)
.append("skills", Arrays.asList("java", "spring", "mongodb"))
.append("manager", new Document()
.append("first_name", "Sally")
.append("last_name", "Johanson"));
collection.insertOne(employee);
Tài liệu lớp là API chính được sử dụng trong BSON. Nó mở rộng Bản đồ Java giao diện và chứa một số phương thức được nạp chồng. Điều này giúp bạn dễ dàng làm việc với các kiểu gốc cũng như các đối tượng phổ biến như ID đối tượng, ngày tháng và danh sách.
3.3. Tìm
Để tìm tài liệu trong MongoDB, chúng tôi cung cấp tài liệu tìm kiếm chỉ định các trường cần truy vấn. Ví dụ:để tìm tất cả các tài liệu có họ là “Smith”, chúng tôi sẽ sử dụng tài liệu JSON sau:
{
"last_name": "Smith"
}
Được viết bằng BSON, cái này sẽ là:
Document query = new Document("last_name", "Smith");
List results = new ArrayList<>();
collection.find(query).into(results);
Truy vấn “Tìm” có thể chấp nhận nhiều trường và hành vi mặc định là sử dụng lôgic và toán tử để kết hợp chúng. Điều này có nghĩa là chỉ những tài liệu khớp với tất cả các trường sẽ được trả lại .
Để giải quyết vấn đề này, MongoDB cung cấp hoặc toán tử truy vấn:
{
"$or": [
{ "first_name": "Joe" },
{ "last_name":"Smith" }
]
}
Điều này sẽ tìm thấy tất cả các tài liệu có họ "Joe" hoặc họ "Smith". Để viết cái này là BSON, chúng tôi sẽ sử dụng một Tài liệu lồng nhau giống như truy vấn chèn ở trên:
Document query =
new Document("$or", Arrays.asList(
new Document("last_name", "Smith"),
new Document("first_name", "Joe")));
List results = new ArrayList<>();
collection.find(query).into(results);
3.4. Cập nhật
Truy vấn cập nhật hơi khác trong MongoDB vì chúng yêu cầu hai tài liệu :
- Tiêu chí lọc để tìm một hoặc nhiều tài liệu
- Một tài liệu cập nhật chỉ định các trường cần sửa đổi
Ví dụ:giả sử chúng tôi muốn thêm kỹ năng “bảo mật” cho mọi nhân viên đã có kỹ năng “lò xo”. Tài liệu đầu tiên sẽ tìm thấy tất cả nhân viên có kỹ năng “mùa xuân” và tài liệu thứ hai sẽ thêm mục nhập “bảo mật” mới vào mảng kỹ năng của họ.
Trong JSON, hai truy vấn này sẽ giống như sau:
{
"skills": {
$elemMatch: {
"$eq": "spring"
}
}
}
{
"$push": {
"skills": "security"
}
}
Và trong BSON, họ sẽ là:
Document query = new Document(
"skills",
new Document(
"$elemMatch",
new Document("$eq", "spring")));
Document update = new Document(
"$push",
new Document("skills", "security"));
collection.updateMany(query, update);
3.5. Xóa
Xóa truy vấn trong MongoDB sử dụng cú pháp giống như truy vấn tìm. Chúng tôi chỉ cung cấp một tài liệu chỉ định một hoặc nhiều tiêu chí để phù hợp.
Ví dụ:giả sử chúng tôi đã tìm thấy một lỗi trong cơ sở dữ liệu nhân viên của mình và vô tình tạo ra nhân viên có giá trị âm trong nhiều năm làm việc. Để tìm tất cả chúng, chúng tôi sẽ sử dụng JSON sau:
{
"years_of_service" : {
"$lt" : 0
}
}
Tài liệu BSON tương đương sẽ là:
Document query = new Document(
"years_of_service",
new Document("$lt", 0));
collection.deleteMany(query);