Chèn tài liệu nhúng vào mongodb

Vì vậy, các bộ sưu tập riêng biệt sẽ tốt nếu bạn cần chọn các tài liệu riêng lẻ, cần kiểm soát nhiều hơn đối với truy vấn hoặc có nhiều tài liệu

Tài liệu được nhúng rất tốt khi bạn muốn có toàn bộ tài liệu, tài liệu có $slice nhận xét hoặc không có nhận xét nào cả

Nhiều bạn nhận thấy rằng việc thực hiện upserts, inserts, update, delete không liên quan đến MongoDB Aggregation Framework (AF). Tuy nhiên với AF, chúng tôi vẫn có quyền chèn hoặc cập nhật tập kết quả của nó nếu chúng tôi chọn. Không phải lúc nào chúng tôi cũng phải trả lại tập kết quả cho khách hàng. Điều này cho phép chúng tôi định hình lại dữ liệu. Chúng ta sẽ nói về điều đó sau trong loạt bài này

Nếu bạn mới sử dụng MongoDB, bạn có thể chưa có nhiều kinh nghiệm làm việc với các tài liệu được nhúng. Tuy nhiên, bạn nên dành thời gian để tìm hiểu cách sử dụng chúng– mô hình tài liệu nhúng là một khái niệm mạnh mẽ, cho phép bạn lưu trữ tất cả các loại thông tin liên quan trong một tài liệu duy nhất. Cấu trúc cơ sở dữ liệu “không chuẩn hóa” này mang lại hiệu suất tốt hơn và thường cho phép các ứng dụng thực hiện ít truy vấn hơn. Trong hướng dẫn này, chúng tôi sẽ cung cấp hướng dẫn cách làm việc với một tài liệu được nhúng trong bộ sưu tập MongoDB

điều kiện tiên quyết

Trước khi chúng ta có thể xem xét một số ví dụ, điều quan trọng là phải xem xét các yêu cầu hệ thống. Đối với nhiệm vụ này, có một vài điều kiện tiên quyết quan trọng phải được thực hiện trước khi tiếp tục

  • Cả MongoDB và trình điều khiển Java MongoDB đều phải được cấu hình đúng cách trước đó

  • Java JDK mới nhất phải được cài đặt và cấu hình đúng cách trước

  • Cuối cùng, dịch vụ MongoDB phải đang chạy

GHI CHÚ. Đối với các ví dụ được mô tả trong hướng dẫn này, chúng tôi giả định rằng phiên bản MongoDB được sử dụng là 4. 0 và Trình điều khiển Java MongoDB là 3. 8. 2

Tài liệu MongoDB nhúng là gì?

Tại thời điểm này, chúng ta sắp sẵn sàng đi sâu vào một số ví dụ mã, nhưng trước tiên, hãy dành một chút thời gian để hiểu các tài liệu được nhúng và cách chúng hoạt động. Tài liệu MongoDB được nhúng hoặc lồng nhau là một tài liệu bình thường được lồng bên trong một tài liệu khác trong bộ sưu tập MongoDB

Phần sau đây hiển thị một mẫu của tài liệu được nhúng

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

{
"_id". ObjectId("5ce8050c3fd48a59557122ca"),
"customerName". "Yeshua Galisanao",
"địa chỉ khách hàng". [
{
"primaryAddress" : [
{
"đường phố". "#43 Đường dễ dàng",
"thành phố". "Niceton",
"bang". "PH",
"zip". "57733"
}
]
},
{
"secondaryAddress" : [
{
"đường phố". "43",
"thành phố". "Seattle",
"bang". "PH",
"zip". "57667"
}
]
}
]
}

Các tài liệu được nhúng đặc biệt hữu ích khi tồn tại mối quan hệ một-nhiều giữa các tài liệu. Trong ví dụ hiển thị ở trên, chúng tôi thấy rằng một khách hàng có nhiều địa chỉ được liên kết với anh ta. Cấu trúc tài liệu lồng nhau giúp dễ dàng truy xuất thông tin địa chỉ đầy đủ về khách hàng này chỉ bằng một truy vấn

Khi nào nên sử dụng Tài liệu MongoDB được nhúng

Có một số điểm chính cần xem xét trước khi sử dụng cấu trúc tài liệu nhúng trong MongoDB

  1. Các tài liệu con MongoDB có cần thiết mỗi khi tài liệu MongoDB gốc được yêu cầu thông qua một truy vấn không?
  2. Việc xóa tài liệu MongoDB gốc cũng sẽ xóa tài liệu MongoDB con– điều này có được chấp nhận đối với tập dữ liệu của bạn không?
  3. Trong MongoDB, kích thước của tài liệu phải nhỏ hơn kích thước BSON tối đa cho tài liệu, là 16 megabyte. Nếu kích thước tài liệu không phải là vấn đề, thì tài liệu được nhúng có thể khả thi dưới dạng cấu trúc tài liệu MongoDB

Kết nối với Triển khai MongoDB

Bây giờ chúng ta hãy chú ý đến mã Java. Ví dụ của chúng tôi bắt đầu bằng một kết nối với MongoDB

MongoClient mongo = MongoClients. tạo ("mongodb. //127. 0. 0. 1. 27017");
MongoDatabase db = mongo. getDatabase("customerDB");
MongoCollectioncollection = db. getCollection("customerCollection");

Mã hiển thị ở trên thiết lập kết nối với triển khai MongoDB. Sau đó, nó tiến hành truy cập cả cơ sở dữ liệu (customerDB) và bộ sưu tập (customerCollection)

Chèn Tài liệu MongoDB đã nhúng bằng Java

Tiếp theo, hãy thử chèn một tài liệu nhúng vào bộ sưu tập MongoDB của chúng tôi. Đoạn mã dưới đây sẽ chèn một tài liệu MongoDB được nhúng ở định dạng Mảng bằng cách sử dụng Arrays()

LƯU Ý Lược đồ tài liệu hiển thị bên dưới chỉ dành cho mục đích demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Tài liệu nestDoc = new Document("customerName", "Yeshua Galisanao")
. append("customer-address",
Arrays. asList(
Tài liệu mới(
"primaryAddress",Arrays. asList(
Tài liệu mới("đường", "#43 Phố Đẹp")
. nối thêm ("thành phố", "Niceton")
. append("state", "PH")
. append("zip", "57733"))
),
Tài liệu mới("địa chỉ phụ",
Mảng. asList(
New Document("street", "#54 Easy Street")
. append("city", "Easyton")
. append("state", "PH")
. append("zip", "57667")
)
)));
db. getCollection("customerCollection"). insertOne(nestDoc);

Với việc sử dụng new Document, MongoDB cho phép người dùng tạo một tài liệu khác, đặt một BasicDBObject trong một BasicDBObj

Để xác minh xem thao tác trên có được thực hiện thành công hay không, hãy sử dụng lệnh hiển thị bên dưới trong trình bao Mongo

db. bộ sưu tập khách hàng. tìm thấy(). khá()

Kết quả sẽ giống như sau

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

{
"_id". ObjectId("5ce88f1a3fd48a6e492ef61b"),
"customerName". "Yeshua Galisanao",
"địa chỉ khách hàng". [
{
"primaryAddress" : [
{
"đường phố". "#43 Phố Nice",
"thành phố". "Niceton",
"bang". "PH",
"zip". "57733"
}
]
},
{
"secondaryAddress" : [
{
"đường phố". "#54 Đường dễ dàng",
"thành phố". "Easyton",
"state". "PH",
"zip". "57667"
}
]
}
]
}

Các kết quả được mô tả ở trên hiển thị một tài liệu nhúng trong tài liệu MongoDB. Trường customer-address chứa một mảng gồm hai tài liệu. Cấu trúc tài liệu nhúng như thế này thường có thể được nhìn thấy trong các ứng dụng như thương mại điện tử, nơi khách hàng thường có các địa chỉ khác nhau cho mục đích vận chuyển

Bây giờ chúng ta đã thấy cách chèn một tài liệu được nhúng, hãy thử cập nhật một tài liệu. Mã được hiển thị bên dưới sẽ cập nhật tài liệu MongoDB được nhúng bằng MongoDB “Ký hiệu dấu chấm”

Ký hiệu dấu chấm — MongoDB sử dụng ký hiệu dấu chấm để cho phép người dùng truy cập các phần tử của một mảng và có thể truy cập các trường tồn tại trong tài liệu được nhúng

Truy vấn BasicDBObject = new BasicDBObject();
truy vấn. put("tên khách hàng","Yeshua Galisanao");

Cập nhật BasicDBObject = new BasicDBObject();
cập nhật. put("$set", new BasicDBObject("địa chỉ khách hàng. 1. phụĐịa chỉ. 0. phố", "#15 2Đường dễ đi"));

db. getCollection("customerCollection"). updateOne(
truy vấn,cập nhật);

Hình ảnh dưới đây cho thấy cấu trúc phân cấp của tài liệu customer-address. Trường customer-address chứa hai tài liệu được nhúng trong đó. primaryAddresssecondaryAddress. Về mặt mảng, chúng có vị trí chỉ số tương ứng là 0 và 1

Các tài liệu primaryAddresssecondaryAddress bao gồm các trường có vị trí chỉ mục riêng của chúng, có thể xem bên dưới. Trong ví dụ của chúng tôi được hiển thị ở trên, mã cập nhật trường new Document1 trong tài liệu secondaryAddress

Chèn tài liệu nhúng vào mongodb

Hãy xem kỹ đoạn mã sau

cập nhật. put("$set", new BasicDBObject("địa chỉ khách hàng. 1. phụĐịa chỉ. 0. phố", "#15 2 Phố dễ dàng"));

Mã này sẽ truy cập trường new Document3 có chỉ số là 1; . Trong secondaryAddress, nó sẽ truy cập trường có tên new Document1 ở vị trí chỉ số 0, sau đó nó sẽ đặt giá trị mới được chỉ định trong mã

Để xác minh bằng trình bao MongoDB

Kết quả sẽ giống như sau

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

{
"_id". ObjectId("5ce88f1a3fd48a6e492ef61b"),
"customerName". "Yeshua Galisanao",
"địa chỉ khách hàng". [
{
"primaryAddress" : [
{
"đường phố". "#43 Phố Nice",
"thành phố". "Niceton",
"bang". "PH",
"zip". "57733"
}
]
},
{
"secondaryAddress" : [
{
"đường phố". "#15 2Phố dễ dàng",
"thành phố". "Easyton",
"state". "PH",
"zip". "57667"
}
]
}
]
}

Lưu ý rằng giá trị của trường new Document1 trong secondaryAddress đã được cập nhật thành công

Phần kết luận

Khi bạn có tài liệu tồn tại mối quan hệ một-nhiều, có thể hữu ích khi sử dụng cấu trúc tài liệu được nhúng hoặc lồng nhau. Làm việc với một tài liệu nhúng trong bộ sưu tập MongoDB không khó miễn là bạn hiểu cấu trúc độc đáo này nên được sử dụng như thế nào. Hướng dẫn này chỉ cho bạn cách chèn và cập nhật Tài liệu MongoDB được nhúng bằng Java. Đảm bảo chuyển sang Phần 2 của hướng dẫn này để tìm hiểu thêm về cách tương tác với các tài liệu MongoDB được nhúng

Làm cách nào để chèn tài liệu lồng nhau trong MongoDB?

Như chúng ta biết rằng trong mongo shell, các tài liệu được biểu diễn bằng dấu ngoặc nhọn ( {} ) và bên trong các dấu ngoặc nhọn này, chúng ta có các cặp trường-giá trị. Bây giờ bên trong các trường này, chúng ta có thể nhúng tài liệu khác bằng cách sử dụng dấu ngoặc nhọn {} và tài liệu này có thể chứa các cặp giá trị trường hoặc tài liệu phụ khác.

Tại sao MongoDB sử dụng tài liệu nhúng?

Tài liệu nhúng là một cách hiệu quả và rõ ràng để lưu trữ dữ liệu liên quan, đặc biệt là dữ liệu thường xuyên được truy cập cùng nhau . Nói chung, khi thiết kế lược đồ cho MongoDB, bạn nên nhúng theo mặc định và chỉ sử dụng các tham chiếu và phép nối phía ứng dụng hoặc phía cơ sở dữ liệu khi chúng đáng giá.

Dữ liệu nhúng trong MongoDB là gì?

Dữ liệu nhúng . Các mô hình dữ liệu không chuẩn hóa này cho phép các ứng dụng truy xuất và thao tác dữ liệu liên quan trong một thao tác cơ sở dữ liệu. MongoDB documents make it possible to embed document structures in a field or array within a document. These denormalized data models allow applications to retrieve and manipulate related data in a single database operation.

Khi nào chúng ta nên nhúng tài liệu này với tài liệu khác trong MongoDB?

Tài liệu MongoDB được nhúng hoặc lồng nhau là một tài liệu bình thường được lồng bên trong một tài liệu khác trong bộ sưu tập MongoDB. Tài liệu được nhúng đặc biệt hữu ích khi tồn tại mối quan hệ một-nhiều giữa các tài liệu .