Trong hướng dẫn MongoDB này, chúng ta sẽ hiểu về truy vấn lồng nhau MongoDB. Chúng tôi sẽ đề cập đến chủ đề này với các hoạt động và ví dụ khác nhau. Ngoài ra, chúng tôi cũng sẽ thảo luận về danh sách các chủ đề sau đây
- MongoDB truy vấn lồng nhau
- Ví dụ truy vấn lồng nhau MongoDB
- Đối tượng lồng truy vấn MongoDB không trống
- Truy vấn lồng nhau MongoDB trả về các trường cụ thể
- Mảng truy vấn lồng nhau MongoDB
- MongoDB truy vấn lồng nhau không bằng nhau
- Kết hợp truy vấn lồng nhau MongoDB
- Truy vấn lồng nhau MongoDB bằng python
Mục lục
MongoDB truy vấn lồng nhau
MongoDB cung cấp một tính năng được gọi là tài liệu được nhúng hoặc lồng nhau. Tài liệu nhúng hoặc tài liệu lồng nhau là những loại tài liệu chứa tài liệu bên trong tài liệu khác
Nói cách khác, khi một bộ sưu tập có một tài liệu và tài liệu này chứa một tài liệu khác, một tài liệu khác chứa một tài liệu phụ khác, v.v., thì các loại tài liệu đó được gọi là tài liệu được nhúng hoặc tài liệu lồng nhau.
ghi chú
- Trong MongoDB, bạn chỉ có thể lồng tài liệu tối đa 100 cấp độ
- Tổng kích thước tài liệu không được vượt quá 16 MB
Đọc Tạo bảng trong MongoDB
Quy trình tạo tài liệu Nhúng
Trong MongoDB, bạn chỉ cần nhúng một tài liệu vào trong một tài liệu khác. Như chúng ta biết rằng trong mongo shell, các tài liệu được định nghĩa 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 giá trị trường
Bây giờ bên trong các trường này, chúng ta có thể nhúng hoặc đặt một 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ể bao gồm các cặp giá trị trường hoặc tài liệu phụ khác
cú pháp
{ field: { field1: value1, field2: value2 } }Đọc Cách MongoDB tạo bộ sưu tập
Ví dụ truy vấn lồng nhau MongoDB
Trong chủ đề MongoDB này, bạn sẽ hiểu khái niệm truy vấn lồng nhau với sự trợ giúp của ví dụ đã cho
Ví dụ
Chúng tôi có một cơ sở dữ liệu 'Công ty'. Bây giờ cơ sở dữ liệu này có một bộ sưu tập có tên là 'khoảng không quảng cáo' và bộ sưu tập này chứa các tài liệu sau
Bên trong tài liệu này, chúng ta có một tên trường ‘item’ chứa một tài liệu khác và tài liệu này chứa hai trường (i. e, sku, color) với các giá trị của chúng
Các tài liệu sau đây sẽ chèn vào bộ sưu tập hàng tồn kho
db.inventory.insertMany([ { "_id" : 1, "dept" : "A", "item" : { "sku" : "101", "color" : "red" }, "sizes" : [ "S", "M" ] }, { "_id" : 2, "dept" : "A", "item" : { "sku" : "102", "color" : "blue" }, "sizes" : [ "M", "L" ] }, { "_id" : 3, "dept" : "B", "item" : { "sku" : "103", "color" : "blue" }, "sizes" : "S" }, { "_id" : 4, "dept" : "A", "item" : { "sku" : "104", "color" : "black" }, "sizes" : [ "S" ] } ])Bây giờ, Chèn tài liệu vào bộ sưu tập. Và, kiểm tra đầu ra
Vì vậy, bộ sưu tập hàng tồn kho chứa 4 tài liệu và các tài liệu này chứa các tài liệu lồng nhau. Bạn có thể truy cập các tài liệu của bộ sưu tập bằng phương thức find()
db.inventory.find().pretty()Đọc sao lưu và khôi phục MongoDB
Đối tượng lồng truy vấn MongoDB không trống
Trong chủ đề MongoDB này, bạn sẽ học cách lấy tất cả các tài liệu trong đó ít nhất một phần tử của trường mảng lồng nhau không rỗng hoặc trống. Hãy hiểu điều này theo sau là một ví dụ
Ví dụ
Các tài liệu sau đây sẽ chèn vào bộ sưu tập hàng tồn kho
db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] }, { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] }, { item: "planner", instock: [ { warehouse: null, qty: 40 }, { warehouse: "B", qty: 5 } ] }, { item: "postcard", instock: [ { warehouse: null, qty: 15 }, { warehouse: null, qty: 35 } ] } ])Hãy kiểm tra việc thực thi mã
Sau đó, chúng ta sẽ áp dụng truy vấn dưới đây cho tập hợp so sánh tất cả các phần tử của mảng để lấy tất cả các tài liệu trong đó có ít nhất một phần tử của trường mảng lồng nhau không rỗng hoặc rỗng
db.inventory.find( { "instock": { "$elemMatch": { "warehouse": { "$ne": null } } } } )Ở đây, chúng tôi đã sử dụng toán tử $elemMatch để khớp các tài liệu chứa trường mảng 'instock' với ít nhất một phần tử khớp với tất cả các tiêu chí truy vấn đã chỉ định
Và, $ne được sử dụng để chọn các tài liệu trong đó giá trị của trường 'kho' không bằng giá trị đã chỉ định.
Chúng tôi đã truy xuất thành công các tài liệu trong đó thuộc tính tài liệu mảng lồng nhau không phải là null
Đọc Cách tạo cơ sở dữ liệu mới trong MongoDB
Truy vấn lồng nhau MongoDB trả về các trường cụ thể
Trong chủ đề này, bạn sẽ học cách trả về các trường cụ thể từ các tài liệu lồng nhau của bộ sưu tập MongoDB. Hãy hiểu điều này với sự giúp đỡ của một ví dụ
Ví dụ
Các tài liệu sau đã được chèn vào bộ sưu tập sản phẩm
db.products.insertMany([ { "_id" : 1, "name" : "xPhone", "price" : 799, "releaseDate" : ISODate("2011-05-14T00:00:00Z"), "spec" : { "ram" : 4, "screen" : 6.5, "cpu" : 2.66 }, "color" : [ "white", "black" ], "storage" : [ 64, 128, 256 ] }, { "_id" : 2, "name" : "xTablet", "price" : 899, "releaseDate" : ISODate("2011-09-01T00:00:00Z"), "spec" : { "ram" : 16, "screen" : 9.5, "cpu" : 3.66 }, "color" : [ "white", "black", "purple" ], "storage" : [ 128, 256, 512 ] }, { "_id" : 3, "name" : "SmartTablet", "price" : 899, "releaseDate" : ISODate("2015-01-14T00:00:00Z"), "spec" : { "ram" : 12, "screen" : 9.7, "cpu" : 3.66 }, "color" : [ "blue" ], "storage" : [ 16, 64, 128 ] }, { "_id" : 4, "name" : "SmartPad", "price" : 699, "releaseDate" : ISODate("2020-05-14T00:00:00Z"), "spec" : { "ram" : 8, "screen" : 9.7, "cpu" : 1.66 }, "color" : [ "white", "orange", "gold", "gray" ], "storage" : [ 128, 256, 1024 ] }, { "_id" : 5, "name" : "SmartPhone", "price" : 599, "releaseDate" : ISODate("2022-09-14T00:00:00Z"), "spec" : { "ram" : 4, "screen" : 5.7, "cpu" : 1.66 }, "color" : [ "white", "orange", "gold", "gray" ], "storage" : [ 128, 256 ] } ])Sau đó, chúng tôi sẽ áp dụng truy vấn sau để tìm để trả về các trường cụ thể từ các tài liệu lồng nhau
db.products.find( {"spec.ram": { $gt: 4} })Ở đây, chúng tôi đã sử dụng toán tử lớn hơn $gt để trả về các tài liệu cụ thể trong đó thông số kỹ thuật. ram' lớn hơn 4
Lưu ý rằng, khi truy cập tài liệu bằng ký hiệu dấu chấm, trường và trường lồng nhau phải nằm trong dấu ngoặc kép
Chúng tôi đã trả về thành công các tài liệu cụ thể về mảng lồng nhau của bộ sưu tập
Đọc Xuất MongoDB sang CSV
Mảng truy vấn lồng nhau MongoDB
Trong chủ đề này, bạn sẽ học cách tìm mảng lồng nhau của bộ sưu tập MongoDB khớp với tài liệu đã chỉ định. Vì vậy, hãy hiểu điều này theo sau là một ví dụ
Ví dụ
Trong ví dụ này, chúng ta sẽ học cách tìm ra những tài liệu đó khớp với trường mảng lồng nhau
Các tài liệu sau đây đã được đưa vào bộ sưu tập hàng tồn kho
db.inventory.insertMany([ { "item": "journal", "instock": [ { "warehouse": "A", "qty": 5 }, { "warehouse": "C", "qty": 15 } ] }, { "item": "notebook", "instock": [ { "warehouse": "C", "qty": 5 } ] }, { "item": "planner", "instock": [ { "warehouse": null, "qty": 40 }, { "warehouse": "B", "qty": 5 } ] }, { "item": "postcard", "instock": [ { "warehouse": null, "qty": 15 }, { "warehouse": null, "qty": 35 } ] } ])Sau đó, chúng tôi sẽ áp dụng truy vấn sau để trả về tất cả các tài liệu đã chọn trong đó một phần tử trong mảng kho khớp với tài liệu đã chỉ định
________số 8Lưu ý rằng, các đối sánh bằng trên toàn bộ tài liệu được nhúng hoặc lồng nhau yêu cầu đối sánh chính xác của tài liệu đã chỉ định, bao gồm cả thứ tự trường
Ví dụ: truy vấn tiếp theo không khớp với bất kỳ tài liệu nào trong bộ sưu tập hàng tồn kho
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )Hãy kiểm tra đầu ra ngay bây giờ;
Chúng tôi đã truy xuất thành công tài liệu mảng lồng nhau của bộ sưu tập
Đọc MongoDB không được công nhận là lệnh nội bộ hoặc bên ngoài
MongoDB truy vấn lồng nhau không bằng nhau
Trong chủ đề này, bạn sẽ học cách tìm tất cả các tài liệu trong MongoDB ở dạng mảng lồng nhau trong đó giá trị của trường không bằng giá trị đã chỉ định
MongoDB cung cấp $ne để chọn các tài liệu có giá trị của trường không bằng giá trị đã xác định. Điều này bao gồm các tài liệu không chứa trường
cú pháp
db.inventory.insertMany([ { "_id" : 1, "dept" : "A", "item" : { "sku" : "101", "color" : "red" }, "sizes" : [ "S", "M" ] }, { "_id" : 2, "dept" : "A", "item" : { "sku" : "102", "color" : "blue" }, "sizes" : [ "M", "L" ] }, { "_id" : 3, "dept" : "B", "item" : { "sku" : "103", "color" : "blue" }, "sizes" : "S" }, { "_id" : 4, "dept" : "A", "item" : { "sku" : "104", "color" : "black" }, "sizes" : [ "S" ] } ])0Hãy hiểu chủ đề này theo sau là một ví dụ
Ví dụ
Các tài liệu sau đây đã được đưa vào bộ sưu tập hàng tồn kho
db.inventory.insertMany([ { "_id" : 1, "dept" : "A", "item" : { "sku" : "101", "color" : "red" }, "sizes" : [ "S", "M" ] }, { "_id" : 2, "dept" : "A", "item" : { "sku" : "102", "color" : "blue" }, "sizes" : [ "M", "L" ] }, { "_id" : 3, "dept" : "B", "item" : { "sku" : "103", "color" : "blue" }, "sizes" : "S" }, { "_id" : 4, "dept" : "A", "item" : { "sku" : "104", "color" : "black" }, "sizes" : [ "S" ] } ])Bây giờ, chúng ta sẽ áp dụng truy vấn sau để chọn tất cả tài liệu từ bộ sưu tập khoảng không quảng cáo nơi giá trị trường mảng lồng nhau không bằng nhau
db.inventory.insertMany([ { "_id" : 1, "dept" : "A", "item" : { "sku" : "101", "color" : "red" }, "sizes" : [ "S", "M" ] }, { "_id" : 2, "dept" : "A", "item" : { "sku" : "102", "color" : "blue" }, "sizes" : [ "M", "L" ] }, { "_id" : 3, "dept" : "B", "item" : { "sku" : "103", "color" : "blue" }, "sizes" : "S" }, { "_id" : 4, "dept" : "A", "item" : { "sku" : "104", "color" : "black" }, "sizes" : [ "S" ] } ])2Ở đây, chúng tôi đã sử dụng thao tác $ne và áp dụng truy vấn trên 'mục' của trường mảng lồng nhau. màu' để trả lại các tài liệu trong đó 'màu' không bằng 'màu xanh'
Kiểm tra đầu ra ngay bây giờ;
Chúng tôi đã tìm thấy thành công tất cả các tài liệu trong đó trường mảng lồng nhau không bằng nhau
Đọc MongoDB tham gia hai bộ sưu tập
Kết hợp truy vấn lồng nhau MongoDB
Trong chủ đề này, bạn sẽ học cách tìm các tài liệu đó từ bộ sưu tập MongoDB khớp với trường mảng lồng nhau. Hãy hiểu điều này với sự giúp đỡ của một ví dụ
Ví dụ
Trong ví dụ này, chúng ta sẽ tìm ra những tài liệu từ bộ sưu tập MongoDB khớp với trường mảng lồng nhau
Các tài liệu sau đây đã được đưa vào bộ sưu tập hàng tồn kho
db.inventory.insertMany([ { "_id" : 1, "dept" : "A", "item" : { "sku" : "101", "color" : "red" }, "sizes" : [ "S", "M" ] }, { "_id" : 2, "dept" : "A", "item" : { "sku" : "102", "color" : "blue" }, "sizes" : [ "M", "L" ] }, { "_id" : 3, "dept" : "B", "item" : { "sku" : "103", "color" : "blue" }, "sizes" : "S" }, { "_id" : 4, "dept" : "A", "item" : { "sku" : "104", "color" : "black" }, "sizes" : [ "S" ] } ])3Bây giờ, chúng ta sẽ áp dụng truy vấn sau để so khớp trường mảng lồng nhau và tìm ra những tài liệu thỏa mãn điều kiện
db.inventory.insertMany([ { "_id" : 1, "dept" : "A", "item" : { "sku" : "101", "color" : "red" }, "sizes" : [ "S", "M" ] }, { "_id" : 2, "dept" : "A", "item" : { "sku" : "102", "color" : "blue" }, "sizes" : [ "M", "L" ] }, { "_id" : 3, "dept" : "B", "item" : { "sku" : "103", "color" : "blue" }, "sizes" : "S" }, { "_id" : 4, "dept" : "A", "item" : { "sku" : "104", "color" : "black" }, "sizes" : [ "S" ] } ])4Lưu ý rằng, các đối sánh bằng trên toàn bộ tài liệu được nhúng hoặc lồng nhau yêu cầu đối sánh chính xác của tài liệu đã chỉ định, bao gồm cả thứ tự trường
Ví dụ: truy vấn tiếp theo không khớp với bất kỳ tài liệu nào trong bộ sưu tập hàng tồn kho
db.inventory.insertMany([ { "_id" : 1, "dept" : "A", "item" : { "sku" : "101", "color" : "red" }, "sizes" : [ "S", "M" ] }, { "_id" : 2, "dept" : "A", "item" : { "sku" : "102", "color" : "blue" }, "sizes" : [ "M", "L" ] }, { "_id" : 3, "dept" : "B", "item" : { "sku" : "103", "color" : "blue" }, "sizes" : "S" }, { "_id" : 4, "dept" : "A", "item" : { "sku" : "104", "color" : "black" }, "sizes" : [ "S" ] } ])5Hãy kiểm tra đầu ra ngay bây giờ;
Chúng tôi đã truy xuất thành công các tài liệu mảng lồng nhau phù hợp của bộ sưu tập MongoDB
Cũng đọc, Nhập CSV vào MongoDB
Truy vấn lồng nhau MongoDB bằng python
Trong MongoDB, truy vấn đóng vai trò quan trọng để tìm nạp một bản ghi cụ thể từ tài liệu MongoDB. Pymongo là một mô-đun python được sử dụng để tương tác giữa cơ sở dữ liệu mongo và ứng dụng Python
Trong chủ đề này, chúng ta sẽ học cách tìm các tài liệu MongoDB ở dạng mảng lồng nhau với sự trợ giúp của python. Hãy hiểu điều này với sự giúp đỡ của một ví dụ
Ví dụ
Trong code, chúng ta đã import thư viện pymongo để tương tác giữa cơ sở dữ liệu mongo và ứng dụng Python. Sau đó, hãy làm theo các bước dưới đây;
- Tạo đối tượng MongoClient và kết nối với máy chủ
- Sau đó, truy cập cơ sở dữ liệu hiện có và bộ sưu tập MongoDB, cơ sở dữ liệu của tôi và khoảng không quảng cáo tương ứng
- Tiếp theo, sử dụng phương thức find() để lấy danh sách tất cả các tài liệu theo điều kiện xác định
- Ở đây, Điều kiện là tìm tài liệu có kích thước trường mảng lồng nhau. h’ bằng 14
Hãy kiểm tra đầu ra ngay bây giờ;
Chúng tôi đã truy xuất thành công các tài liệu mảng lồng nhau của bộ sưu tập MongoDB bằng python
Hướng dẫn MongoDB liên quan
- MongoDB tắt với mã 100
- Cách kiểm tra xem MongoDB đã được cài đặt chưa
- MongoDB sắp xếp theo ngày
- MongoDB sắp xếp theo lĩnh vực
- Nhóm MongoDB theo nhiều trường
Vì vậy, trong hướng dẫn này, chúng ta đã hiểu về truy vấn lồng nhau MongoDB. Và, chúng tôi đã đề cập đến các hoạt động khác nhau với các ví dụ. Chúng tôi đã đề cập đến danh sách các chủ đề sau đây
- MongoDB truy vấn lồng nhau
- Ví dụ truy vấn lồng nhau MongoDB
- Đối tượng lồng truy vấn MongoDB không trống
- Truy vấn lồng nhau MongoDB trả về các trường cụ thể
- Mảng truy vấn lồng nhau MongoDB
- MongoDB truy vấn lồng nhau không bằng nhau
- Kết hợp truy vấn lồng nhau MongoDB
- Truy vấn lồng nhau MongoDB bằng python
Bijay
Tôi là Bijay có hơn 15 năm kinh nghiệm trong ngành công nghiệp phần mềm. Trong thời gian này, tôi đã làm việc trên MariaDB và sử dụng nó trong rất nhiều dự án. Hầu hết độc giả của chúng tôi đến từ Hoa Kỳ, Canada, Vương quốc Anh, Úc, New Zealand, v.v.
Bạn muốn tìm hiểu MariaDB? . Ngoài ra, tôi là MVP của Microsoft