Các cách khác nhau để thực hiện tổng hợp trong MongoDB là gì?

Khi người dùng MongoDB muốn thu thập số liệu từ cơ sở dữ liệu MongoDB, việc tổng hợp MongoDB là công cụ tốt nhất cho việc này. Gói dữ liệu từ nhiều nguồn bản ghi, sau đó được vận hành theo nhiều cách khác nhau trên nhóm dữ liệu để trả về kết quả kết hợp là điều mà MongoDB cho phép người dùng của nó. Trong chương này, bạn sẽ tìm hiểu về khái niệm tập hợp được hỗ trợ bởi MongoDB

Tổng hợp là gì?

Trong MongoDB, tổng hợp có thể được định nghĩa là thao tác được sử dụng để xử lý các loại dữ liệu khác nhau trong bộ sưu tập, trả về kết quả được tính toán. Khái niệm tổng hợp chủ yếu phân cụm dữ liệu của bạn từ nhiều tài liệu khác nhau, sau đó được sử dụng và vận hành theo nhiều cách (trên các dữ liệu được phân cụm này) để trả về kết quả kết hợp có thể mang lại thông tin mới cho cơ sở dữ liệu hiện có. Bạn có thể liên kết tổng hợp với tổng hợp của số đếm (*) cùng với 'nhóm theo' được sử dụng trong SQL vì cả hai đều tương đương về mặt hoạt động

MongoDB cung cấp ba cách khác nhau để thực hiện tổng hợp

  • Đường ống tổng hợp
  • Chức năng thu nhỏ bản đồ
  • Phương pháp tổng hợp mục đích duy nhất

Phương thức tổng hợp () trong MongoDB

Hàm tổng hợp của MongoDB sẽ nhóm các bản ghi dưới dạng một bộ sưu tập mà sau đó có thể được sử dụng để cung cấp các hoạt động như tổng số (tổng), giá trị trung bình, tối thiểu và tối đa, v.v. từ nhóm tổng hợp dữ liệu được trích xuất

Để thực hiện chức năng tổng hợp như vậy, phương thức tổng hợp () được sử dụng. Cú pháp của phương pháp này trông giống như thế này

cú pháp

db.collection_name.aggregate(aggregate_operation)

Bây giờ, chúng ta hãy xem phương thức tổng hợp () hoạt động như thế nào

Thực hiện phương thức tổng hợp ()

Hãy xem xét một bộ sưu tập có tên là lập trình viên, có dữ liệu sau. Bạn đã sử dụng phương thức find() để xem tất cả các dữ liệu khác nhau có sẵn trong đó

Trong nửa sau của MongoDB bằng Ví dụ, chúng ta sẽ khám phá quy trình tổng hợp MongoDB. Nửa đầu của loạt bài này đề cập đến Xác thực MongoDB bằng ví dụ

Khi đến lúc thu thập các số liệu từ MongoDB, không có công cụ nào tốt hơn các tập hợp MongoDB. Tập hợp là một tập hợp các hàm cho phép bạn thao tác dữ liệu được trả về từ một truy vấn MongoDB và trong bài viết này, chúng ta sẽ khám phá các tập hợp MongoDB bằng cách minh họa một số. Cụ thể, chúng ta sẽ xem cách tạo các phép biến đổi dữ liệu cơ bản bằng cách sử dụng phép tổng hợp, sau đó khám phá cách tạo các truy vấn phức tạp hơn bằng cách xâu chuỗi nhiều phép biến đổi lại với nhau. Cuối cùng, chúng tôi sẽ trình bày cách sử dụng các phép biến đổi đó để trích xuất thông tin chi tiết từ dữ liệu của chúng tôi

Bắt đầu một quy trình tổng hợp

Bắt đầu một quy trình tổng hợp là một việc đơn giản. chỉ cần gọi hàm tổng hợp trên bất kỳ bộ sưu tập nào. Hãy bắt đầu bằng cách sử dụng thực thể khách hàng của chúng tôi từ bài viết trước về xác thực

{
  "id": "1",
  "firstName": "Jane",
  "lastName": "Doe",
  "phoneNumber": "555-555-1212",
  "city": "Beverly Hills",
  "state: "CA",
  "zip": 90210
  "email": "[email protected]"
}

Bộ sưu tập khách hàng của chúng tôi chứa bất kỳ số lượng khách hàng nào, mỗi khách hàng có định dạng dữ liệu tương tự. Để bắt đầu tổng hợp trên tập khách hàng, chúng ta gọi hàm tổng hợp trên tập khách hàng

> db.customers.aggregate([ .. aggregation steps go here ...]);

Hàm tổng hợp chấp nhận một mảng các phép biến đổi dữ liệu được áp dụng cho dữ liệu theo thứ tự chúng được xác định. Điều này làm cho việc tổng hợp rất giống với các đường dẫn luồng dữ liệu khác. các phép biến đổi được xác định trước sẽ được thực hiện trước và kết quả sẽ được sử dụng cho phép biến đổi tiếp theo trong chuỗi

Trong các phần tiếp theo, chúng ta sẽ khám phá các loại chuyển đổi dữ liệu mà bạn có thể thực hiện theo thứ tự điển hình về cách bạn muốn thực hiện chúng. Thứ tự mà bạn thực hiện các phép biến đổi có thể tạo ra sự khác biệt lớn vì bạn sẽ muốn lọc ra bất kỳ tập hợp nào mà bạn không muốn thao tác trước khi thực hiện bất kỳ thao tác phức tạp hoặc chuyên sâu nào trên chúng

Tài liệu phù hợp

Giai đoạn đầu tiên của quy trình là đối sánh và điều đó cho phép chúng tôi lọc ra các tài liệu để chúng tôi chỉ thao tác với những tài liệu mà chúng tôi quan tâm. Biểu thức phù hợp trông và hoạt động giống như hàm tìm MongoDB hoặc mệnh đề SQL WHERE. Để tìm tất cả người dùng sống ở Beverly Hills (hay cụ thể hơn là mã vùng 90210), chúng tôi sẽ thêm giai đoạn đối sánh vào quy trình tổng hợp của mình

> db.customers.aggregate([ 
  { $match: { "zip": 90210 }}
]);

Điều này sẽ trả về mảng khách hàng sống trong mã zip 90210. Sử dụng giai đoạn khớp theo cách này không khác gì sử dụng phương thức tìm kiếm trên một bộ sưu tập. Hãy xem loại thông tin chi tiết nào chúng ta có thể thu thập bằng cách thêm một số giai đoạn vào quy trình

Nhóm tài liệu

Khi chúng tôi đã lọc ra các tài liệu mà chúng tôi không muốn, chúng tôi có thể bắt đầu nhóm những tài liệu mà chúng tôi làm thành các tập hợp con hữu ích. Chúng tôi cũng có thể sử dụng các nhóm để thực hiện các hoạt động trên một trường chung trong tất cả các tài liệu, chẳng hạn như tính tổng của một tập hợp các giao dịch và đếm tài liệu

Trước khi đi sâu vào các hoạt động phức tạp hơn, hãy bắt đầu với một cái gì đó đơn giản. đếm các tài liệu chúng tôi khớp trong phần trước

> db.customers.aggregate([ 
  { $match: {"zip": "90210"}}, 
  { 
    $group: {
      _id: null, 
      count: {
        $sum: 1
      }
    }
  }
]);

Biến đổi

> db.customers.aggregate([ .. aggregation steps go here ...]);
2 cho phép chúng tôi nhóm các tài liệu lại với nhau và thực hiện các phép biến đổi hoặc thao tác trên tất cả các tài liệu được nhóm đó. Trong trường hợp này, chúng tôi đang tạo một trường mới trong kết quả có tên là số đếm, cộng thêm 1 vào tổng hiện hành cho mọi tài liệu. Trường
> db.customers.aggregate([ .. aggregation steps go here ...]);
3 là bắt buộc để nhóm và thường chứa các trường từ mỗi tài liệu mà chúng tôi muốn giữ lại (tức là. số điện thoại). Vì chúng tôi chỉ tìm kiếm số lượng của mọi tài liệu, chúng tôi có thể làm cho nó thành null ở đây

{ "_id" : null, "count" : 24 }

Ở đây chúng ta đã thấy việc sử dụng toán tử số học

> db.customers.aggregate([ .. aggregation steps go here ...]);
4, tính tổng một trường trong tất cả các tài liệu trong một bộ sưu tập. Chúng tôi có thể nhóm các tài liệu của mình lại với nhau trên bất kỳ trường nào chúng tôi muốn và cũng thực hiện các loại tính toán khác. Chúng ta hãy xem xét một số toán tử khác mà chúng ta có thể sử dụng và cách chúng ta có thể sử dụng chúng

Thu thập thông tin chi tiết với Tổng, Tối thiểu, Tối đa và Trung bình

Giao dịch là một nơi tuyệt vời để chúng ta duỗi chân khi nói đến các phép toán. Hãy phân tích các giao dịch của chúng tôi và xem liệu chúng tôi có thể hiểu rõ hơn về danh mục sản phẩm của mình không

Mô hình giao dịch của chúng tôi trông như thế này

{
  "id": "1",
  "productId": "1",
  "customerId": "1",
  "amount": 20.00,
  "transactionDate": ISODate("2017-02-23T15:25:56.314Z")
}

Hãy bắt đầu bằng cách tính tổng số tiền bán hàng được thực hiện trong tháng 1. Chúng tôi sẽ bắt đầu bằng cách chỉ khớp các giao dịch xảy ra trong khoảng thời gian từ ngày 1 tháng 1 đến ngày 31 tháng 1

{
  "id": "1",
  "firstName": "Jane",
  "lastName": "Doe",
  "phoneNumber": "555-555-1212",
  "city": "Beverly Hills",
  "state: "CA",
  "zip": 90210
  "email": "[email protected]"
}
0

Toán tử

> db.customers.aggregate([ .. aggregation steps go here ...]);
5 và
> db.customers.aggregate([ .. aggregation steps go here ...]);
6 là bộ so sánh cho phép chúng tôi giới hạn ngày của mình trong phạm vi cụ thể. Trong trường hợp của chúng tôi, chúng tôi muốn
> db.customers.aggregate([ .. aggregation steps go here ...]);
7 lớn hơn hoặc bằng ngày đầu tiên của tháng Giêng và nhỏ hơn ngày đầu tiên của tháng Hai. Cũng lưu ý rằng chúng tôi đang sử dụng thời gian Zulu (UTC) ở đây;

Giai đoạn tiếp theo của quy trình là tổng hợp số tiền giao dịch và đưa số tiền đó vào một trường mới có tên là

> db.customers.aggregate([ .. aggregation steps go here ...]);
8

{
  "id": "1",
  "firstName": "Jane",
  "lastName": "Doe",
  "phoneNumber": "555-555-1212",
  "city": "Beverly Hills",
  "state: "CA",
  "zip": 90210
  "email": "[email protected]"
}
5

Truy vấn cuối cùng trông giống như thế này

{
  "id": "1",
  "firstName": "Jane",
  "lastName": "Doe",
  "phoneNumber": "555-555-1212",
  "city": "Beverly Hills",
  "state: "CA",
  "zip": 90210
  "email": "[email protected]"
}
6

Kết quả cuối cùng là số tiền giao dịch giống như sau

{
  "id": "1",
  "firstName": "Jane",
  "lastName": "Doe",
  "phoneNumber": "555-555-1212",
  "city": "Beverly Hills",
  "state: "CA",
  "zip": 90210
  "email": "[email protected]"
}
7

Một số số liệu hàng tháng hữu ích khác mà chúng tôi có thể muốn là giá trung bình của mỗi giao dịch, giao dịch tối thiểu và tối đa trong tháng. Hãy thêm những người đó vào nhóm của chúng tôi để chúng tôi có thể có được một bức ảnh duy nhất trong cả tháng

Kết hợp với câu lệnh

> db.customers.aggregate([ .. aggregation steps go here ...]);
9, có vẻ như sau

> db.customers.aggregate([ .. aggregation steps go here ...]);
0

Kết quả cuối cùng của chúng tôi cho chúng tôi một bức tranh thú vị về doanh số bán hàng tháng trong cửa hàng bánh quy hư cấu của chúng tôi trông như thế nào

> db.customers.aggregate([ .. aggregation steps go here ...]);
1

Sử dụng các tính toán này, chúng tôi có thể thấy rằng hơn một nửa số giao dịch của chúng tôi dưới 10 đô la và có khả năng số tiền giao dịch trung bình của chúng tôi đang bị sai lệch bởi một vài ngoại lệ (đơn đặt hàng bánh quy số lượng lớn). Chúng tôi thậm chí có thể tiến thêm một bước nữa bằng cách tính toán độ lệch chuẩn trên tất cả các giao dịch bằng cách sử dụng

> db.customers.aggregate([ 
  { $match: { "zip": 90210 }}
]);
0 hoặc sửa đổi các nhóm của chúng tôi để loại trừ các giá trị ngoại lệ bằng cách thay đổi các điều kiện
> db.customers.aggregate([ .. aggregation steps go here ...]);
9 của chúng tôi

kết thúc

Giờ đây, chúng ta đã biết cách sử dụng quy trình tổng hợp, chúng ta có thể bắt đầu kết hợp các nhóm, hoạt động và thậm chí các tham số phù hợp khác để có được thông tin chuyên sâu và chi tiết về bất kỳ doanh nghiệp nào. Mặc dù có rất nhiều thao tác khác mà chúng tôi có thể thực hiện không được đề cập trong bài viết này, nhưng nó sẽ cung cấp một điểm khởi đầu tốt cho bất kỳ ai quan tâm đến việc phân tích dữ liệu được lưu trữ trong MongoDB


Nếu bạn có bất kỳ phản hồi nào về điều này hoặc bất kỳ bài viết Soạn bài nào khác, hãy gửi một dòng cho nhóm Soạn bài tại posts@compose. com. Chúng tôi rất vui khi được nghe từ bạn

Các cách khác nhau để thực hiện tổng hợp trong MongoDB cung cấp một số ví dụ là gì?

Đường ống tổng hợp . Mỗi khâu thực hiện một thao tác trên chứng từ đầu vào. Ví dụ: một giai đoạn có thể lọc tài liệu, nhóm tài liệu và tính giá trị . Các tài liệu được xuất ra từ một giai đoạn được chuyển sang giai đoạn tiếp theo.

Cách tổng hợp được thực hiện trong MongoDB?

Trong MongoDB, các thao tác tổng hợp xử lý bản ghi/tài liệu dữ liệu và trả về kết quả tính toán . Nó thu thập các giá trị từ các tài liệu khác nhau và nhóm chúng lại với nhau, sau đó thực hiện các loại hoạt động khác nhau trên dữ liệu được nhóm đó như tổng, trung bình, tối thiểu, tối đa, v.v. để trả về kết quả được tính toán.

Loại nào sau đây là các loại tập hợp trong MongoDB?

MongoDB có thể thực hiện tổng hợp theo 3 cách và chúng như sau. Quy trình tổng hợp . Chức năng thu nhỏ bản đồ. Phương pháp tổng hợp một mục đích.

Phương thức tổng hợp nào được MongoDB ưa thích sử dụng?

Đường dẫn cung cấp khả năng tổng hợp dữ liệu hiệu quả bằng cách sử dụng các hoạt động gốc trong MongoDB và là phương pháp ưa thích để tổng hợp dữ liệu trong MongoDB. Đường dẫn tổng hợp có thể hoạt động trên một bộ sưu tập được phân đoạn.