Tập hợp nhóm MongoDB

Tap Hop Nhom Mongodb



Tổng hợp là quy trình trích xuất dữ liệu từ bộ sưu tập MongoDB. Nó xử lý nhiều tài liệu và cung cấp kết quả ước tính. Tập hợp trong MongoDB có một số toán tử và phương thức thực hiện các nhiệm vụ khác nhau. Trong số các toán tử đó, toán tử $group nhóm các tài liệu cho từng nhóm duy nhất và sắp xếp chúng theo một biểu thức được xác định. Toán tử nhóm rất quan trọng trong MongoDB vì nó tạo điều kiện thuận lợi cho nhiều thao tác dữ liệu. Tập hợp $group trong ví dụ MongoDB cùng với các bộ tích lũy khác nhau được cung cấp bên dưới.

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

Toán tử $group nên được sử dụng để nhóm các tài liệu đầu vào theo biểu thức _id đã chỉ định. Sau đó, nó sẽ trả về một tài liệu với tổng giá trị cho từng nhóm riêng biệt. Để bắt đầu triển khai, chúng tôi đã tạo bộ sưu tập “Sách” trong MongoDB. Sau khi tạo bộ sưu tập “Sách”, chúng tôi đã chèn các tài liệu được liên kết với các trường khác nhau. Các tài liệu được chèn vào bộ sưu tập thông qua phương thức insertMany() khi truy vấn được thực hiện được hiển thị bên dưới.

>db.Books.insertMany([

{
_id:1,
tiêu đề: 'Anna Karenina',
giá: 290,
năm: 1879,
order_status: 'Còn hàng',
tác giả: {
'tên':'Leo Tolstoy'
}
},
{
_id:2,
tiêu đề: 'Giết con chim nhại',
giá: 500,
năm:  1960,
order_status: 'hết hàng',
tác giả: {
'tên':'Harper Lee'
}
},
{
_id:3,
tiêu đề: 'Người vô hình',
giá: 312,
năm: 1953,
order_status: 'Còn hàng',
tác giả: {
'tên':'Ralph Ellison'
}
},
{
_id:4,
tiêu đề: 'Người yêu dấu',
giá: 370,
năm:  1873,
order_status: 'hết_hàng',
tác giả: {
'tên':'Toni Morrison'
}
},
{
_id:5,
tiêu đề: 'Mọi thứ sụp đổ',
giá: 200,
năm:  1958,
order_status: 'Còn hàng',
tác giả: {
'tên':'Chinua Achebe'
}
},
{
_id:6,
tiêu đề: 'Màu tím',
giá: 510,
năm:  1982,
order_status: 'hết hàng',
tác giả: {
'tên':'Alice Walker'
}
}
])

Các tài liệu được lưu trữ thành công trong bộ sưu tập “Sách” mà không gặp phải bất kỳ lỗi nào vì đầu ra được xác nhận là “đúng”. Bây giờ, chúng ta sẽ sử dụng các tài liệu này của bộ sưu tập “Sách” để thực hiện phép tổng hợp “nhóm $”.









Ví dụ #1: Sử dụng $group Aggregation



Cách sử dụng đơn giản của tập hợp $group được trình bày ở đây. Truy vấn tổng hợp nhập toán tử “$group” trước, sau đó toán tử “$group” tiếp tục lấy các biểu thức để tạo các tài liệu được nhóm.





>db.Books.aggregate([

{ $group:{ _id:'$author.name'} }

])

Truy vấn ở trên của toán tử $group được chỉ định với trường “_id” để tính toán tổng giá trị cho tất cả các tài liệu đầu vào. Sau đó, trường “_id” được phân bổ với “$author.name” tạo thành một nhóm khác trên trường “_id”. Các giá trị riêng biệt của $author.name sẽ được trả về vì chúng tôi không tính toán bất kỳ giá trị tích lũy nào. Việc thực hiện truy vấn tổng hợp $group có kết quả như sau. Trường _id có các giá trị của tác giả.names.



Ví dụ #2: Sử dụng $group Aggregation với $push Accumulator

Ví dụ về tập hợp $group sử dụng bất kỳ bộ tích lũy nào đã được đề cập ở trên. Nhưng chúng ta có thể sử dụng bộ tích lũy trong tập hợp $group. Các toán tử bộ tích lũy là những toán tử được sử dụng trên các trường tài liệu đầu vào khác với các trường được “nhóm” trong “_id”. Giả sử rằng chúng ta muốn đẩy các trường của biểu thức vào một mảng thì bộ tích lũy “$push” được gọi ra trong toán tử “$group”. Ví dụ này sẽ giúp bạn hiểu rõ hơn về bộ tích lũy “$push” của “$group”.

>db.Books.aggregate(

[

{ $group : { _id : '$_id', năm: { $push: '$year' } } }

]

).khá();

Ở đây, chúng tôi muốn nhóm ngày tháng năm xuất bản của những cuốn sách đã cho trong mảng. Truy vấn trên nên được áp dụng để thực hiện điều này. Truy vấn tổng hợp được cung cấp cùng với biểu thức trong đó toán tử “$group” lấy biểu thức trường “_id” và biểu thức trường “year” để lấy năm của nhóm bằng cách sử dụng bộ tích lũy $push. Đầu ra được truy xuất từ ​​truy vấn cụ thể này sẽ tạo ra một mảng các trường năm và lưu trữ tài liệu được nhóm trả về bên trong nó.

Ví dụ #3: Sử dụng $group Aggregation với Accumulator “$min”

Tiếp theo, chúng tôi có bộ tích lũy “$min” được sử dụng trong tập hợp $group để nhận giá trị khớp tối thiểu từ mọi tài liệu trong bộ sưu tập. Biểu thức truy vấn cho bộ tích lũy $min được đưa ra dưới đây.

>db.Books.aggregate([

{
nhóm $:{
_Tôi:{
tiêu đề: '$title',
order_status: '$order_status'
},
giá tối thiểu:{$min: '$price'}
}
}
])

Truy vấn có biểu thức tổng hợp “$group” trong đó chúng tôi đã nhóm tài liệu cho các trường “title” và “order_status”. Sau đó, chúng tôi đã cung cấp bộ tích lũy $min để nhóm các tài liệu bằng cách nhận các giá trị giá tối thiểu từ các trường chưa được nhóm. Khi chúng tôi chạy truy vấn bộ tích lũy $min bên dưới, truy vấn này sẽ trả về các tài liệu được nhóm theo tiêu đề và order_status theo trình tự. Giá tối thiểu xuất hiện đầu tiên và giá cao nhất của tài liệu được đặt cuối cùng.

Ví dụ #4: Sử dụng $group Aggregation với $sum Accumulator

Để lấy tổng của tất cả các trường số bằng cách sử dụng toán tử $group, thao tác bộ tích lũy $sum được triển khai. Các giá trị không phải là số trong các bộ sưu tập được bộ tích lũy này xem xét. Ngoài ra, chúng tôi đang sử dụng tập hợp $match ở đây với tập hợp $group. Tập hợp $match chấp nhận các điều kiện truy vấn được cung cấp trong một tài liệu và chuyển tài liệu phù hợp tới tập hợp $group, tập hợp này sau đó trả về tổng của tài liệu cho mỗi nhóm. Đối với bộ tích lũy $sum, truy vấn được trình bày bên dưới.

>db.Books.aggregate([

{ $match:{ order_status:'In-Stock'}},

{ $group:{ _id:'$author.name', totalBooks: { $sum:1 } }

}])

Truy vấn tổng hợp ở trên bắt đầu bằng toán tử $match khớp với tất cả “order_status” có trạng thái là “Còn hàng” và được chuyển đến $group làm đầu vào. Sau đó, toán tử $group có biểu thức tích lũy $sum xuất ra tổng của tất cả sách trong kho. Lưu ý rằng “$sum:1” thêm 1 vào mỗi tài liệu thuộc cùng một nhóm. Đầu ra ở đây chỉ hiển thị hai tài liệu được nhóm có “order_status” được liên kết với “In-Stock”.

Ví dụ #5: Sử dụng Tập hợp $group với Tập hợp $sort

Toán tử $group ở đây được sử dụng với toán tử “$sort” được sử dụng để sắp xếp các tài liệu được nhóm. Truy vấn sau đây có ba bước đối với thao tác sắp xếp. Đầu tiên là giai đoạn $match, sau đó là giai đoạn $group và cuối cùng là giai đoạn $sort sắp xếp tài liệu được nhóm.

>db.Books.aggregate([

{ $match:{ order_status:'hết hàng'}},

{ $group:{ _id:{ authorName :'$author.name'}, totalBooks: { $sum:1} } },

{ $sort:{ authorName:1}}

])

Tại đây, chúng tôi đã tìm nạp tài liệu phù hợp có “order_status” là hết hàng. Sau đó, tài liệu phù hợp được nhập vào trong giai đoạn $group đã nhóm tài liệu với trường “tên tác giả” và “totalBooks”. Biểu thức $group được liên kết với bộ tích lũy $sum cho tổng số sách 'hết hàng'. Các tài liệu được nhóm sau đó được sắp xếp với biểu thức $sort theo thứ tự tăng dần vì “1” ở đây biểu thị thứ tự tăng dần. Tài liệu nhóm được sắp xếp theo thứ tự đã chỉ định sẽ thu được ở đầu ra sau.

Ví dụ #6: Sử dụng $group Aggregation cho giá trị khác biệt

Quy trình tổng hợp cũng nhóm các tài liệu theo mục bằng cách sử dụng toán tử $group để trích xuất các giá trị mục riêng biệt. Hãy để chúng tôi có biểu thức truy vấn của câu lệnh này trong MongoDB.

>db.Books.aggregate( [ { $group : { _id : '$title' } } ] ).pretty();

Truy vấn tổng hợp được áp dụng cho bộ sưu tập Sách để nhận giá trị riêng biệt của tài liệu nhóm. Nhóm $ ở đây nhận biểu thức _id xuất ra các giá trị riêng biệt khi chúng tôi đã nhập trường “tiêu đề” cho nó. Đầu ra của tài liệu nhóm thu được khi chạy truy vấn này có nhóm tên tiêu đề đối với trường _id.

Phần kết luận

Hướng dẫn nhằm mục đích làm rõ khái niệm về toán tử tập hợp $group để nhóm tài liệu trong cơ sở dữ liệu MongoDB. Cách tiếp cận tổng hợp MongoDB cải thiện hiện tượng nhóm. Cấu trúc cú pháp của toán tử $group được thể hiện bằng các chương trình ví dụ. Ngoài ví dụ cơ bản về toán tử $group, chúng tôi cũng đã sử dụng toán tử này với một số bộ tích lũy như $push, $min, $sum và các toán tử như $match và $sort.