Cách sử dụng Đường dẫn tổng hợp trong MongoDB

Cách sử dụng Đường dẫn tổng hợp trong MongoDB
Những độc giả như bạn giúp ủng hộ MUO. Khi bạn mua hàng bằng các liên kết trên trang web của chúng tôi, chúng tôi có thể kiếm được hoa hồng liên kết. Đọc thêm.

Quy trình tổng hợp là cách được khuyến nghị để chạy các truy vấn phức tạp trong MongoDB. Nếu bạn đang sử dụng MapReduce của MongoDB, tốt nhất bạn nên chuyển sang quy trình tổng hợp để tính toán hiệu quả hơn.





Video MUO trong ngày CUỘN ĐỂ TIẾP TỤC VỚI NỘI DUNG

Tập hợp trong MongoDB là gì và nó hoạt động như thế nào?

  Phác thảo quy trình đường ống tổng hợp

Đường dẫn tổng hợp là một quy trình gồm nhiều giai đoạn để chạy nâng cao truy vấn trong MongoDB . Nó xử lý dữ liệu thông qua các giai đoạn khác nhau được gọi là đường ống. Bạn có thể sử dụng kết quả được tạo từ một cấp độ làm mẫu hoạt động ở cấp độ khác.





Ví dụ: bạn có thể chuyển kết quả của thao tác so khớp sang giai đoạn khác để sắp xếp theo thứ tự đó cho đến khi bạn nhận được kết quả mong muốn.





Mỗi giai đoạn của quy trình tổng hợp đều có toán tử MongoDB và tạo ra một hoặc nhiều tài liệu được chuyển đổi. Tùy thuộc vào truy vấn của bạn, một cấp độ có thể xuất hiện nhiều lần trong quy trình. Ví dụ: bạn có thể cần sử dụng số tiền $ hoặc $sắp xếp toán tử thực hiện nhiều giai đoạn trên đường ống tổng hợp.

Các giai đoạn của đường ống tổng hợp

Đường dẫn tổng hợp chuyển dữ liệu qua nhiều giai đoạn trong một truy vấn. Có một số giai đoạn và bạn có thể tìm thấy thông tin chi tiết của chúng trong Tài liệu MongoDB .



Hãy xác định một số cái được sử dụng phổ biến nhất dưới đây.

Giai đoạn $match

Giai đoạn này giúp bạn xác định các điều kiện lọc cụ thể trước khi bắt đầu các giai đoạn tổng hợp khác. Bạn có thể sử dụng nó để chọn dữ liệu phù hợp mà bạn muốn đưa vào quy trình tổng hợp.





Giai đoạn nhóm $

Giai đoạn nhóm phân tách dữ liệu thành các nhóm khác nhau dựa trên tiêu chí cụ thể bằng cách sử dụng các cặp khóa-giá trị. Mỗi nhóm đại diện cho một khóa trong tài liệu đầu ra.

Ví dụ, hãy xem xét những điều sau đây việc bán hàng dữ liệu mẫu:





  Dữ liệu mẫu chẳng hạn

Bằng cách sử dụng quy trình tổng hợp, bạn có thể tính toán tổng doanh số bán hàng và doanh số bán hàng cao nhất cho từng nhóm sản phẩm:

 { 
$group: {
    _id: $Section,
    total_sales_count: {$sum : $Sold},
    top_sales: {$max: $Amount},
  }
}

Các _id: Phần $ cặp nhóm tài liệu đầu ra dựa trên các phần. Bằng cách chỉ định top_sale_count doanh số hàng đầu các trường, MongoDB tạo các khóa mới dựa trên hoạt động được xác định bởi trình tổng hợp; Điều này có thể là số tiền $ , $ phút , tối đa $ , hoặc $trung bình .

Giai đoạn $skip

Bạn có thể dùng $bỏ qua giai đoạn bỏ qua một số lượng tài liệu được chỉ định trong đầu ra. Nó thường diễn ra sau vòng bảng. Ví dụ: nếu bạn mong đợi hai tài liệu đầu ra nhưng bỏ qua một tài liệu thì việc tổng hợp sẽ chỉ xuất ra tài liệu thứ hai.

Để thêm giai đoạn bỏ qua, hãy chèn $bỏ qua hoạt động vào đường ống tổng hợp:

 ..., 
{
    $skip: 1
  },

Giai đoạn sắp xếp $

Giai đoạn sắp xếp cho phép bạn sắp xếp dữ liệu theo thứ tự giảm dần hoặc tăng dần. Ví dụ: chúng ta có thể sắp xếp thêm dữ liệu trong ví dụ truy vấn trước đó theo thứ tự giảm dần để xác định phần nào có doanh số cao nhất.

Thêm $sắp xếp toán tử cho truy vấn trước đó:

 ..., 
{
    $sort: {top_sales: -1}
  },

Giai đoạn giới hạn $

Thao tác giới hạn giúp giảm số lượng tài liệu đầu ra mà bạn muốn đường dẫn tổng hợp hiển thị. Ví dụ, sử dụng giới hạn $ toán tử để có được phần có doanh thu cao nhất được trả về ở giai đoạn trước:

 ..., 
{
    $sort: {top_sales: -1}
  },

{"$limit": 1}

Ở trên chỉ trả về tài liệu đầu tiên; đây là phần có doanh thu cao nhất vì nó xuất hiện ở đầu sản phẩm được sắp xếp.

Giai đoạn dự án $

Các dự án $ stage cho phép bạn định hình tài liệu đầu ra theo ý muốn. Sử dụng dự án $ toán tử, bạn có thể chỉ định trường nào sẽ được đưa vào đầu ra và tùy chỉnh tên khóa của trường đó.

Ví dụ: một đầu ra mẫu không có dự án $ sân khấu trông như thế này:

  Mẫu dữ liệu chưa được sắp xếp cho quy trình tổng hợp

Hãy xem nó trông như thế nào với dự án $ sân khấu. Để thêm dự án $ đến đường ống:

 ..., 

{
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }

Vì trước đây chúng tôi đã nhóm dữ liệu dựa trên các phần sản phẩm nên dữ liệu ở trên bao gồm từng phần sản phẩm trong tài liệu đầu ra. Nó cũng đảm bảo rằng số lượng bán hàng tổng hợp và tính năng bán hàng hàng đầu trong đầu ra là Tổng số đã bán TopSale .

Đầu ra cuối cùng sạch hơn rất nhiều so với đầu ra trước đó:

  Đầu ra mẫu cho các giai đoạn quy trình tổng hợp

Giai đoạn thư giãn $

Các $thư giãn giai đoạn chia nhỏ một mảng trong tài liệu thành các tài liệu riêng lẻ. Lấy những điều sau đây Đơn đặt hàng dữ liệu, ví dụ:

  Dữ liệu đơn hàng mẫu

Sử dụng $thư giãn giai đoạn để giải cấu trúc mặt hàng mảng trước khi áp dụng các giai đoạn tổng hợp khác. Ví dụ, việc tháo gỡ mặt hàng mảng có ý nghĩa nếu bạn muốn tính tổng doanh thu cho từng sản phẩm:

 db.Orders.aggregate( 
[
  {
    "$unwind": "$items"
  },
  {
    "$group": {
      "_id": "$items.product",
      "total_revenue": { "$sum": { "$multiply": ["$items.quantity", "$items.price"] } }
    }
  },
  {
    "$sort": { "total_revenue": -1 }
  },

  {
        "$project": {
            "_id": 0,
            "Product": "$_id",
            "TotalRevenue": "$total_revenue",

        }
    }
])

Đây là kết quả của truy vấn tổng hợp ở trên:

  Kết quả mẫu cho giai đoạn thư giãn

Cách tạo một đường dẫn tổng hợp trong MongoDB

Mặc dù quy trình tổng hợp bao gồm một số thao tác nhưng các giai đoạn nổi bật trước đó sẽ cung cấp cho bạn ý tưởng về cách áp dụng chúng trong quy trình, bao gồm cả truy vấn cơ bản cho từng thao tác.

Sử dụng trước đó việc bán hàng mẫu dữ liệu, chúng ta hãy thảo luận một số giai đoạn ở trên thành một phần để có cái nhìn rộng hơn về quy trình tổng hợp:

 db.sales.aggregate([ 

    {
        "$match": {
            "Sold": { "$gte": 5 }
            }
    },

        {

        "$group": {
            "_id": "$Section",
            "total_sales_count": { "$sum": "$Sold" },
            "top_sales": { "$max": "$Amount" },
            
        }

    },

    {
        "$sort": { "top_sales": -1 }
    },

    {"$skip": 0},

    {
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }
    
])

Kết quả cuối cùng trông giống như kết quả bạn đã thấy trước đây:

  Đầu ra mẫu cho các giai đoạn quy trình tổng hợp

Đường ống tổng hợp so với MapReduce

Cho đến khi ngừng sử dụng kể từ MongoDB 5.0, cách thông thường để tổng hợp dữ liệu trong MongoDB là thông qua MapReduce. Mặc dù MapReduce có ứng dụng rộng hơn Ngoài MongoDB, nó kém hiệu quả hơn so với quy trình tổng hợp, yêu cầu tập lệnh của bên thứ ba viết các chức năng bản đồ và thu gọn riêng biệt.

Mặt khác, đường dẫn tổng hợp chỉ dành riêng cho MongoDB. Nhưng nó cung cấp một cách sạch hơn và hiệu quả hơn để thực hiện các truy vấn phức tạp. Bên cạnh tính đơn giản và khả năng mở rộng truy vấn, các giai đoạn quy trình đặc trưng giúp đầu ra có thể tùy chỉnh nhiều hơn.

Chúng còn nhiều nữa sự khác biệt giữa đường dẫn tổng hợp và MapReduce . Bạn sẽ thấy chúng khi chuyển từ MapReduce sang quy trình tổng hợp.

máy tính xách tay apple dùng được bao lâu

Thực hiện các truy vấn dữ liệu lớn hiệu quả trong MongoDB

Truy vấn của bạn phải hiệu quả nhất có thể nếu bạn muốn chạy các phép tính chuyên sâu trên dữ liệu phức tạp trong MongoDB. Đường dẫn tổng hợp là lý tưởng cho truy vấn nâng cao. Thay vì thao tác dữ liệu trong các hoạt động riêng biệt, thường làm giảm hiệu suất, việc tổng hợp cho phép bạn gói tất cả chúng vào trong một quy trình hiệu suất duy nhất và thực thi chúng một lần.

Mặc dù quy trình tổng hợp hiệu quả hơn MapReduce nhưng bạn có thể thực hiện việc tổng hợp nhanh hơn và hiệu quả hơn bằng cách lập chỉ mục dữ liệu của mình. Điều này giới hạn lượng dữ liệu MongoDB cần quét trong mỗi giai đoạn tổng hợp.