Khi làm việc trên một dự án, có thể có nhu cầu hợp nhất hai tài liệu hoặc một số trường cụ thể trong tài liệu. Nếu đó là trường hợp, bạn đang ở đúng nơi. MongoDB cung cấp cho người dùng khả năng tổng hợp dữ liệu họ muốn, miễn là dữ liệu đó có trong cùng một cơ sở dữ liệu
Chúng tôi sử dụng toán tử Tra cứu MongoDB để đạt được điều tương tự
Toán tử MongoDB Lookup, theo định nghĩa, “Thực hiện liên kết bên ngoài bên trái với một tập hợp không được chia sẻ trong cùng một cơ sở dữ liệu để lọc các tài liệu từ tập hợp “đã tham gia” để xử lý. ” Nói một cách đơn giản, sử dụng toán tử Tra cứu MongoDB để có thể hợp nhất dữ liệu từ tài liệu mà bạn đang chạy truy vấn và tài liệu mà bạn muốn lấy dữ liệu từ đó
Tuy nhiên, trước khi chuyển thẳng sang cách hoạt động của toán tử tập hợp trình xem MongoDB và cách sử dụng nó, chúng ta sẽ thảo luận ngắn gọn về Tập hợp trong MongoDB. Và nguyên lý hoạt động của MongoDB looker Operator. Chúng tôi cũng sẽ thảo luận chi tiết về cú pháp cho từng tình huống và trường hợp, đồng thời đưa ra một số ví dụ thực tế. Hãy bắt đầu nào
Mục lục
Tập hợp trong MongoDB là gì?
Quá trình thu thập dữ liệu để trả về kết quả được tính toán được gọi là Tổng hợp trong MongoDB. Trước tiên, quy trình yêu cầu thu thập các điểm dữ liệu cần thiết, sau đó nhóm chúng lại với nhau theo mức độ liên quan để thực hiện các thao tác như tổng, trung bình, tối thiểu, tối đa, v.v. Vì vậy, nói chung, tổng hợp trong MongoDB tương tự như trong SQL.
Ba trường hợp sử dụng được đánh giá cao cho các hoạt động tổng hợp như sau
- Để nhóm các giá trị từ nhiều tài liệu
- Thực hiện các hoạt động trả về một kết quả duy nhất trên dữ liệu được nhóm
- Phân tích xu hướng bằng cách kiểm tra các giá trị dữ liệu và thay đổi trong đó theo thời gian
Có ba cách để thực hiện tổng hợp trong MongoDB
- đường ống tổng hợp. Phương pháp này là cách được đề xuất để thực hiện các tác vụ tổng hợp. Tìm hiểu thêm về
- Chức năng thu nhỏ bản đồ. Hàm Map-reduce dùng để tổng hợp kết quả trên diện rộng. Nó có hai chức năng chính là ánh xạ và thu nhỏ. Hàm map nhóm tất cả các tài liệu và hàm rút gọn thực hiện các thao tác trên dữ liệu được nhóm
- tổng hợp mục đích duy nhất. Phương pháp tập hợp đơn mục đích là một cách đơn giản để thực hiện các tác vụ tổng hợp, nhưng nó thiếu một số tính năng khi so sánh với phương pháp đường ống Tập hợp. Nó chủ yếu được sử dụng để thực hiện các tác vụ trong tài liệu như đếm số lượng giá trị riêng biệt trong tài liệu hoặc số lượng tài liệu, v.v.
Toán tử Tra cứu MongoDB là gì?
Theo định nghĩa, toán tử tra cứu MongoDB tận dụng phương thức liên kết ngoài bên trái để hợp nhất thông tin từ tài liệu này sang tài liệu khác. Sử dụng toán tử tra cứu $, bạn có thể thêm một trường bổ sung vào tài liệu hiện có để làm sáng tỏ thông tin
Ví dụ: bạn có thể ánh xạ một trường chứa ba chữ số cuối của ID nhân viên với tên bộ phận của bạn bằng cách thêm trường Tên bộ phận vào đầu ra được tạo.
Tuy nhiên, toán tử Tra cứu MongoDB hoạt động như thế nào?
Trong các hoạt động tra cứu $, chúng tôi có hai đầu vào bộ sưu tập được yêu cầu. 'Bộ sưu tập đầu vào' và 'từ bộ sưu tập. ’
'Bộ sưu tập đầu vào' thu thập thông tin cơ sở dữ liệu mà thao tác tra cứu $ được thực hiện trên đó. Mặt khác, 'từ bộ sưu tập' thu thập thông tin từ cơ sở dữ liệu mà chúng tôi muốn hợp nhất tài liệu chính với
Đơn giản hóa MongoDB ETL bằng Đường ống dữ liệu không mã của Hevo
Dữ liệu Hevo là Đường ống dữ liệu không mã cung cấp giải pháp được quản lý hoàn toàn để thiết lập Tích hợp dữ liệu cho hơn 100 nguồn dữ liệu [Bao gồm hơn 40 nguồn miễn phí] và sẽ cho phép bạn tải trực tiếp dữ liệu từ các nguồn như MongoDB đến Kho dữ liệu hoặc Đích
Hevo sẽ tự động hóa luồng dữ liệu của bạn trong vài phút mà không cần viết bất kỳ dòng mã nào. Kiến trúc chịu lỗi của nó đảm bảo rằng dữ liệu của bạn được an toàn và nhất quán. Hevo cung cấp cho bạn một giải pháp thực sự hiệu quả và hoàn toàn tự động để quản lý dữ liệu theo thời gian thực và luôn có sẵn dữ liệu để phân tích.
Bắt đầu với Hevo miễn phíCùng điểm qua một số tính năng nổi bật của Hevo
- Được quản lý hoàn toàn. Nó không yêu cầu quản lý và bảo trì vì Hevo là một nền tảng hoàn toàn tự động
- Chuyển đổi dữ liệu. Nó cung cấp một giao diện đơn giản để hoàn thiện, sửa đổi và làm giàu dữ liệu bạn muốn chuyển.
- Thời gian thực. Hevo cung cấp di chuyển dữ liệu theo thời gian thực. Vì vậy, dữ liệu của bạn luôn sẵn sàng để phân tích
- Quản lý lược đồ. Hevo có thể tự động phát hiện lược đồ của dữ liệu đến và ánh xạ nó tới lược đồ đích
- kết nối. Hevo hỗ trợ hơn 100 Tích hợp cho các nền tảng SaaS như WordPress, FTP/SFTP, Tệp, Cơ sở dữ liệu, công cụ BI và API REST gốc & Trình kết nối Webhooks. Nó hỗ trợ nhiều điểm đến khác nhau bao gồm Google BigQuery, Amazon Redshift, Snowflake, Firebolt, Data Warehouses; .
- Chắc chắn. Hevo có kiến trúc chịu lỗi đảm bảo rằng dữ liệu được xử lý một cách an toàn, nhất quán và không bị mất dữ liệu
- Hevo được xây dựng để mở rộng quy mô. Khi số lượng nguồn và khối lượng dữ liệu của bạn tăng lên, Hevo sẽ mở rộng quy mô theo chiều ngang, xử lý hàng triệu bản ghi mỗi phút với rất ít độ trễ
- Giám sát trực tiếp. Giám sát nâng cao cung cấp cho bạn chế độ xem một cửa để theo dõi tất cả các hoạt động diễn ra trong Đường ống dữ liệu
- Hỗ trợ trực tuyến. Nhóm Hevo luôn sẵn sàng mở rộng hỗ trợ đặc biệt cho khách hàng của mình thông qua trò chuyện, email và các cuộc gọi hỗ trợ
Các cú pháp được sử dụng cho các hoạt động tra cứu MongoDB
Cú pháp cho các thao tác Tra cứu MongoDB khác nhau đối với ba tình huống có thể xảy ra
- Kết hợp bình đẳng với một điều kiện tham gia duy nhất
- Tham gia Điều kiện và Truy vấn con trên Bộ sưu tập đã tham gia
- Các truy vấn con tương quan sử dụng cú pháp ngắn gọn
Kết hợp bình đẳng với một điều kiện tham gia duy nhất
Trong Khớp đẳng thức để thực hiện các thao tác hợp nhất giữa một trường từ cơ sở dữ liệu đầu vào và cơ sở dữ liệu đã tham gia, cú pháp sẽ như sau
{
$lookup:
{
from: ,
localField: ,
foreignField: ,
as:
}
}
Tài liệu MongoDB giải thích các ràng buộc được sử dụng như sau. [Ngôn ngữ đã được chỉnh sửa cho thống nhất, bấm vào đây để xem phiên bản gốc]
Mô tả trườngChỉ định bộ sưu tập trong cùng một cơ sở dữ liệu để thực hiện phép nối với. Bộ sưu tập{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
1 không thể được phân đoạn. Để biết chi tiết, xem. Chỉ định trường từ đầu vào tài liệu đến giai đoạn. thực hiện đối chiếu bằng nhau trên {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
4 với {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
5 từ các tài liệu của bộ sưu tập {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
1. Nếu tài liệu đầu vào không chứa {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
4, thì coi trường đó có giá trị là {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
9 để so khớp. Chỉ định trường từ các tài liệu trong bộ sưu tập {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
1. thực hiện đối sánh bằng nhau trên {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
5 với {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
4 từ các tài liệu đầu vào. Nếu một tài liệu trong bộ sưu tập {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
1 không chứa {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
5, thì xử lý giá trị đó là {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
9 để phục vụ mục đích khớp. Chỉ định tên của trường mảng mới để thêm vào tài liệu đầu vào. Trường mảng mới chứa các tài liệu phù hợp từ bộ sưu tập {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
1. Nếu tên được chỉ định đã tồn tại trong tài liệu đầu vào, thì trường hiện có sẽ bị ghi đèCâu lệnh giả SQL cho thao tác nêu trên sẽ như thế này
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
Tham gia Điều kiện và Truy vấn con trên Bộ sưu tập đã tham gia
Nói chung, các truy vấn con của MongoDB liên quan đến tương quan có thể liên quan đến truy vấn của SQL. Do đó, trong truy vấn con tương quan, truy vấn bên trong tham chiếu đến các giá trị truy vấn bên ngoài. Đồng thời, truy vấn con không tương quan làm ngược lại.
Trong trường hợp này, để thực hiện các truy vấn con tương quan và không tương quan, cú pháp sẽ như sau
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
Tài liệu MongoDB giải thích các ràng buộc được sử dụng như sau. [Ngôn ngữ đã được chỉnh sửa cho thống nhất, bấm vào đây để xem phiên bản gốc]
Mô tả trườngChỉ định bộ sưu tập trong cùng một cơ sở dữ liệu để thực hiện thao tác nối. Không thể chia nhỏ bộ sưu tập đã tham gia [xem ]. Không bắt buộc. Chỉ định các biến sẽ sử dụng trong các giai đoạn. Sử dụng các biểu thức biến để truy cập các trường từ các tài liệu của bộ sưu tập đã tham gia được nhập vàoSELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9. Chỉ định SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9 để chạy trên bộ sưu tập đã tham gia. _SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9 xác định các tài liệu kết quả từ bộ sưu tập đã tham gia. Để trả lại tất cả tài liệu, hãy chỉ định một ô trống SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9 {
$lookup:
{
from: ,
localField: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
3. _SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9 không được bao gồm giai đoạn hoặc giai đoạn. ____16_______9 không thể truy cập trực tiếp vào các trường tài liệu đã tham gia. Thay vào đó, hãy xác định các biến cho các trường tài liệu đã nối bằng cách sử dụng tùy chọn rồi tham chiếu các biến trong các giai đoạn SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9. Chỉ định tên của trường mảng mới để thêm vào các tài liệu đã tham gia. Trường mảng mới chứa các tài liệu phù hợp từ bộ sưu tập đã tham gia. Nếu tên được chỉ định đã tồn tại trong tài liệu đã tham gia, trường hiện có sẽ bị ghi đèCâu lệnh giả SQL cho thao tác nêu trên sẽ như thế này
SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
Các truy vấn con tương quan sử dụng cú pháp ngắn gọn
Tính năng này ra đời trong MongoDB phiên bản 5. 0. Tính năng này sử dụng biểu mẫu cú pháp ngắn gọn cho truy vấn con tương quan. Định dạng mới loại bỏ các ràng buộc để chạy khớp đẳng thức trước trên hai cơ sở dữ liệu bên trong toán tử $exp
Trong trường hợp này, để thực hiện các truy vấn con tương quan ở định dạng ngắn gọn, cú pháp sẽ như sau
{
$lookup:
{
from: ,
localField: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
Tài liệu MongoDB giải thích các ràng buộc được sử dụng như sau. [Ngôn ngữ đã được chỉnh sửa cho thống nhất, bấm vào đây để xem phiên bản gốc]
Mô tả trườngChỉ định bộ sưu tập nước ngoài trong cùng một cơ sở dữ liệu để tham gia vào bộ sưu tập địa phương. Không thể chia nhỏ bộ sưu tập nước ngoài [xem ]. Chỉ định các tài liệu trong nước’{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
4 để thực hiện so khớp bình đẳng với các tài liệu nước ngoài’ {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
5. Nếu một tài liệu cục bộ không chứa giá trị {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
4, thì sử dụng giá trị {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
9 cho đối sánh. Chỉ định các tài liệu nước ngoài’ ______1_______5 để thực hiện so khớp bình đẳng với các tài liệu trong nước’ {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
4. Nếu một tài liệu nước ngoài không chứa giá trị {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
5, thì sử dụng giá trị {
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
9 cho khớp. Không bắt buộc. Chỉ định các biến sẽ sử dụng trong các giai đoạn. Sử dụng các biểu thức biến để truy cập vào các trường tài liệu được nhập vào SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9. Chỉ định SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9 để chạy trên bộ sưu tập nước ngoài. _______16_______9 trả lại tài liệu từ bộ sưu tập nước ngoài. Để trả lại tất cả tài liệu, hãy chỉ định một ô trống SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9 {
$lookup:
{
from: ,
localField: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
3. _SELECT *,
FROM collection
WHERE IN [
SELECT
FROM
WHERE
];
9 không thể bao gồm hoặc các giai đoạn. Chỉ định tên của trường mảng mới để thêm vào tài liệu nước ngoài. Trường mảng mới chứa các tài liệu phù hợp từ bộ sưu tập nước ngoài. Nếu tên được chỉ định đã tồn tại trong tài liệu nước ngoài, trường hiện có sẽ bị ghi đèCâu lệnh giả SQL cho thao tác nêu trên sẽ như thế này
SELECT *,
FROM localCollection
WHERE IN [
SELECT
FROM
WHERE =
AND
];
Cân nhắc cho các hoạt động tra cứu MongoDB
Lượt xem và đối chiếu
Các chế độ xem phải có một bộ sưu tập tương tự khi thực hiện các tác vụ tổng hợp với nhiều chế độ xem
Những hạn chế
Trong khi chỉ định một đường dẫn cho bộ sưu tập đã tham gia, bạn không được đưa $out hoặc $merge vào $lookup. [đã thay đổi trong phiên bản 2. 3]
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ], // Cannot include $out or $merge
as:
}
}
Bộ sưu tập được chia sẻ
Trong phiên bản 5 của MongoDB. 1, giờ đây có thể chỉ định các bộ sưu tập được chia sẻ trong tham số 'từ' của các giai đoạn tra cứu $
db.collection.aggregate[[
{ $lookup: { from: "fromCollection", … } }
]]
Vài ví dụ để hiểu rõ hơn về toán tử tra cứu MongoDB
Trong phần này, chúng ta sẽ xem xét một số ví dụ để tìm hiểu về Toán tử trình xem MongoDB trong một số tình huống nhất định. Hãy bắt đầu nào
Thực hiện Tham gia bình đẳng đơn với tra cứu MongoDB
Đầu tiên, tạo một bộ sưu tập có tên là 'Đơn hàng' với các bộ dữ liệu sau. Bạn có thể sao chép và dán mã được cung cấp bên dưới vào hệ thống của mình
db.orders.insertMany[ [
{ "_id" : 1, "item" : "almonds", "price" : 12, "quantity" : 2 },
{ "_id" : 2, "item" : "pecans", "price" : 20, "quantity" : 1 },
{ "_id" : 3 }
] ]
Thứ hai, tạo một bộ sưu tập khác có tên là "khoảng không quảng cáo" với các bộ dữ liệu sau
db.inventory.insertMany[ [
{ "_id" : 1, "sku" : "almonds", "description": "product 1", "instock" : 120 },
{ "_id" : 2, "sku" : "bread", "description": "product 2", "instock" : 80 },
{ "_id" : 3, "sku" : "cashews", "description": "product 3", "instock" : 60 },
{ "_id" : 4, "sku" : "pecans", "description": "product 4", "instock" : 70 },
{ "_id" : 5, "sku": null, "description": "Incomplete" },
{ "_id" : 6 }
] ]
Mã được cung cấp bên dưới bây giờ sẽ hợp nhất thông tin trên tài liệu 'Đặt hàng' từ tài liệu 'hàng tồn kho' bằng cách sử dụng trường 'mặt hàng', trường này sẽ thu thập thông tin từ tài liệu 'đơn đặt hàng' và trường 'SKU' từ tài liệu 'hàng tồn kho'. Mã trông như thế này
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
0Đầu ra trông như thế này
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
1Dưới đây đưa ra là câu lệnh giả SQL mà hoạt động tương ứng
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
2Sử dụng Tra cứu MongoDB với một mảng
Có thể khớp các phần tử ở định dạng mảng trong định dạng vô hướng mà không cần giai đoạn $unwind. Làm theo ví dụ dưới đây. Chúng tôi sẽ tạo một bộ sưu tập mẫu 'các lớp' với các bộ dữ liệu được cung cấp bên dưới
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
3Bây giờ hãy tạo một tài liệu 'thành viên' khác với các bộ dữ liệu được cung cấp bên dưới
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
4Mã tổng hợp được cung cấp bên dưới sẽ hợp nhất tài liệu 'lớp' với tài liệu 'thành viên. ' Điều này sẽ khớp trường 'thành viên' với trường 'tên'
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
5Các hoạt động sẽ trở lại như sau
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
6Sử dụng Tra cứu MongoDB với $mergerObjects
Nói chung, toán tử $mergerObecjts hợp nhất nhiều tài liệu thành một. Chúng tôi sẽ tiến hành bằng cách tạo tài liệu 'đơn đặt hàng' trước, như được đưa ra bên dưới
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
7Bây giờ, hãy tạo một tài liệu có tên là 'items. ’
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
8Trước tiên, người vận hành sẽ sử dụng toán tử Tra cứu MongoDB để hợp nhất hai tài liệu, sau đó sử dụng toán tử $mergeObjects trong $replaceRoot để hợp nhất thông tin
SELECT *,
FROM collection
WHERE IN [
SELECT *
FROM
WHERE =
];
9Toán tử trả về như sau
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
0Phần kết luận
Trong bài viết hướng dẫn này, chúng ta đã tìm hiểu về khái niệm Aggregation trong MongoDB, cũng như khái niệm về MongoDB Looker Operator. Chúng tôi cũng đã thảo luận về các cú pháp khác nhau được sử dụng cho các tình huống và ví dụ khác nhau để hiểu rõ hơn về chủ đề này
Tuy nhiên, MongoDB là một Dịch vụ Cơ sở dữ liệu Tài liệu gốc trên đám mây và nó yêu cầu sự nhạy bén về kỹ thuật để hiểu một số khái niệm nặng về mã;
Ghé thăm trang web của chúng tôi để khám phá HevoHevo Data, Đường ống dữ liệu không mã cung cấp cho bạn giải pháp nhất quán và đáng tin cậy để quản lý truyền dữ liệu giữa nhiều nguồn khác nhau như MongoDB và nhiều Điểm đến mong muốn khác nhau, với một vài cú nhấp chuột
Hevo Data với khả năng tích hợp mạnh mẽ với hơn 100 nguồn [bao gồm hơn 40 nguồn miễn phí] cho phép bạn không chỉ xuất dữ liệu từ các nguồn dữ liệu mong muốn và tải dữ liệu đó đến đích bạn chọn mà còn chuyển đổi và làm phong phú dữ liệu của bạn để phân tích.
Bạn muốn thử Hevo? . Bạn cũng có thể xem giá cạnh tranh nhất sẽ giúp bạn chọn gói phù hợp cho nhu cầu kinh doanh của mình