Nhóm truy vấn MongoDB theo ví dụ tổng
Thao tác truy vấn tổng MongoDB (tổng hợp) được sử dụng đơn giản để tính toán và trả về tổng của các giá trị số. Điều quan trọng cần lưu ý là hoạt động bỏ qua các giá trị không phải là số. Ngoài ra, nếu một trường không tồn tại được chuyển, toán tử sẽ trả về giá trị 0 Show
Hành vi của truy vấn tổng MongoDB đã được thay đổi trong MongoDB 5. 0 và hiện được cung cấp với một số hoạt động hoặc giai đoạn khác. Trong MongoDB 3. 2 trở về trước, nó chỉ khả dụng ở vòng bảng $ Hướng dẫn này nhằm mục đích cung cấp các ví dụ để bạn có thể hiểu cách sử dụng toán tử truy vấn tổng MongoDB. Vì vậy, hãy để chúng tôi bắt đầu hướng dẫn nhanh chóng và dễ dàng này Cú pháp truy vấn tổng MongoDBCú pháp của toán tử $sum thay đổi tùy theo số lượng biểu thức mà người dùng muốn thao tác trên đó Đối với một biểu thức toán hạng duy nhất { $sum: } Đối với danh sách nhiều biểu thức toán hạng { $sum: [ , .. ] } Loại dữ liệu kết quảNgoại trừ trường hợp nó không thể được thể hiện đầy đủ trong loại đó, kết quả sẽ cùng loại với đầu vào. Trong những trường hợp này
Sử dụng MongoDB Sum Query trong Mongo ShellHãy để chúng tôi lấy một vài ví dụ từ các tài liệu chính thức để hiểu cách sử dụng thao tác truy vấn tổng MongoDB Trong MongoDB, toán tử đường dẫn tổng hợp 7 tính toán và trả về tổng các giá trị sốcú phápToán tử 7 hỗ trợ hai cú phápCú pháp 1
Cú pháp 2
Cú pháp đầu tiên chấp nhận một đối số và cú pháp thứ hai chấp nhận nhiều đối số Khi được sử dụng trong giai đoạn 9, bạn chỉ có thể sử dụng cú pháp đầu tiên. Trong trường hợp này, 7 trả về tổng của tất cả các giá trị số có được từ việc áp dụng biểu thức đã chỉ định cho từng tài liệu trong một nhóm tài liệu chia sẻ cùng một nhóm theo khóaVí dụ về Cú pháp 1 (Đối số đơn)Dưới đây là một vài ví dụ sử dụng cú pháp 1 Tài liệu được nhómVí dụ này sử dụng 7 kết hợp với 9 để trả về tổng trên một nhóm tài liệu được nhóm theo khóaGiả sử chúng ta có một bộ sưu tập tên là { "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Kangaroo", "weight" : 100 } { "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 } { "_id" : 7, "name" : "Punch", "type" : "Kangaroo", "weight" : 200 } { "_id" : 8, "name" : "Snap", "type" : "Cat", "weight" : 12 } { "_id" : 9, "name" : "Ruff", "type" : "Dog", "weight" : 30 }3 với các tài liệu sau { "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Kangaroo", "weight" : 100 } { "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 } { "_id" : 7, "name" : "Punch", "type" : "Kangaroo", "weight" : 200 } { "_id" : 8, "name" : "Snap", "type" : "Cat", "weight" : 12 } { "_id" : 9, "name" : "Ruff", "type" : "Dog", "weight" : 30 } Chúng ta có thể nhóm các tài liệu này theo trường { "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Kangaroo", "weight" : 100 } { "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 } { "_id" : 7, "name" : "Punch", "type" : "Kangaroo", "weight" : 200 } { "_id" : 8, "name" : "Snap", "type" : "Cat", "weight" : 12 } { "_id" : 9, "name" : "Ruff", "type" : "Dog", "weight" : 30 }4 của chúng, sau đó sử dụng 7 để trả về tổng của trường { "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Kangaroo", "weight" : 100 } { "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 } { "_id" : 7, "name" : "Punch", "type" : "Kangaroo", "weight" : 200 } { "_id" : 8, "name" : "Snap", "type" : "Cat", "weight" : 12 } { "_id" : 9, "name" : "Ruff", "type" : "Dog", "weight" : 30 }6 cho mỗi nhóm
Kết quả { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 } MảngVí dụ này áp dụng 7 cho một tài liệu có chứa một trường có một mảng các giá trịTùy chọn này chỉ khả dụng khi sử dụng cú pháp đối số đơn. Mảng bị bỏ qua khi sử dụng cú pháp nhiều đối số (thêm về điều này bên dưới) Giả sử chúng ta có một bộ sưu tập tên là { "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Kangaroo", "weight" : 100 } { "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 } { "_id" : 7, "name" : "Punch", "type" : "Kangaroo", "weight" : 200 } { "_id" : 8, "name" : "Snap", "type" : "Cat", "weight" : 12 } { "_id" : 9, "name" : "Ruff", "type" : "Dog", "weight" : 30 }8 với các tài liệu sau { "_id" : 1, "player" : "Homer", "scores" : [ 1, 7, 2, 3, 8, 7, 1 ] } { "_id" : 2, "player" : "Marge", "scores" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "player" : "Bart", "scores" : [ 15, 11, 8, 0, 1, 3 ] } { "_id" : 4, "player" : "Brian", "scores" : [ 7 ] } { "_id" : 5, "player" : "Farnsworth", "scores" : [ ] } { "_id" : 6, "player" : "Meg", "scores" : null } { "_id" : 7, "player" : "Ron" } Chúng ta có thể áp dụng 7 cho trường 0 trong mỗi tài liệu
Kết quả { "_id" : 1, "player" : "Homer", "sum" : 29 } { "_id" : 2, "player" : "Marge", "sum" : 52 } { "_id" : 3, "player" : "Bart", "sum" : 38 } { "_id" : 4, "player" : "Brian", "sum" : 7 } { "_id" : 5, "player" : "Farnsworth", "sum" : 0 } { "_id" : 6, "player" : "Meg", "sum" : 0 } { "_id" : 7, "player" : "Ron", "sum" : 0 } Trong trường hợp này, bốn tài liệu đầu tiên trả về tổng của các số khác nhau trong mảng tương ứng của chúng Trong trường hợp của tài liệu 4, số này giống với số, vì chỉ có một số trong mảng Tài liệu 5 trả về 1 vì chúng tôi đã cung cấp một mảng trốngTài liệu 6 đã trả lại 1 vì chúng tôi đã cung cấp 3 làm đối sốTài liệu 7 trả về 1 vì trường thậm chí không tồn tạiVí dụ về Cú pháp 2 (Nhiều đối số)Cú pháp thứ hai liên quan đến việc cung cấp 7 với nhiều hơn một đối số. 7 sau đó tính tổng dựa trên tất cả các đối số được cung cấpGiả sử chúng ta có một bộ sưu tập tên là 7 với các tài liệu sau{ "_id" : 1, "a" : 1, "b" : 2, "c" : 3, "d" : 4 } { "_id" : 2, "a" : 1, "b" : 2, "c" : 3, "d" : [ 4 ] } { "_id" : 3, "a" : 1, "b" : 2, "c" : 3, "d" : "Hey" } { "_id" : 4, "a" : "One", "b" : "Two", "c" : "Three", "d" : "Four" } Chúng ta có thể sử dụng 7 để trả về tổng của các trường 9, { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }0, { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }1 và { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }2 của mỗi tài liệu
Kết quả 0Tài liệu 1 trả về tổng giá trị đầu vào của { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }3, { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }4, { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }5 và { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }6 Tuy nhiên, hai tài liệu tiếp theo chỉ trả về tổng giá trị đầu vào của { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }3, { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }4 và { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }5. Toán tử 7 đã bỏ qua các trường { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }2 của họ Điều này là do 7 bỏ qua các giá trị không phải là số. Vì vậy, trong trường hợp này, nó đã bỏ qua { "_id" : 1, "player" : "Homer", "scores" : [ 1, 7, 2, 3, 8, 7, 1 ] } { "_id" : 2, "player" : "Marge", "scores" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "player" : "Bart", "scores" : [ 15, 11, 8, 0, 1, 3 ] } { "_id" : 4, "player" : "Brian", "scores" : [ 7 ] } { "_id" : 5, "player" : "Farnsworth", "scores" : [ ] } { "_id" : 6, "player" : "Meg", "scores" : null } { "_id" : 7, "player" : "Ron" }3 trong tài liệu 3 và tính tổng từ các trường (số) còn lại Đối với tài liệu 2, trường { "_id" : "Kangaroo", "sum" : 430 } { "_id" : "Cat", "sum" : 27 } { "_id" : "Dog", "sum" : 60 }2 của nó chứa một mảng. Như đã đề cập, toán tử 7 bỏ qua mảng khi sử dụng cú pháp nhiều đối số. Chính xác hơn, nó coi các mảng là các giá trị không phải là số khi được sử dụng trong ngữ cảnh này và 7 bỏ qua các giá trị không phải là sốNếu tất cả các giá trị không phải là số, thì 7 trả về 1. Chúng ta có thể thấy điều này với tài liệu 4Các trường bị thiếuKhi sử dụng cú pháp nhiều đối số, 7 sẽ bỏ qua mọi trường bị thiếu. Nghĩa là, nếu bạn cung cấp một trường không tồn tại, nó sẽ bỏ qua nó. Nếu không có trường nào tồn tại, thì nó trả về 1Thí dụ 1Kết quả 0Trong trường hợp này, tôi đã cung cấp thêm một trường (_______22_______1) không tồn tại trong tài liệu. 7 đã tính tổng dựa trên các trường còn lại tồn tại
$sum 1 trong MongoDB là gì?1 câu trả lời. Trong MongoDB, $sum sẽ cộng giá trị của biểu thức cho mỗi hàng và trong trường hợp của bạn, bạn có 3 hàng nên nó sẽ là 1 .
Làm cách nào để sử dụng số lượng trong nhóm trong MongoDB?Chúng ta có thể sử dụng đoạn mã sau để nhóm theo trường 'vị trí' và đếm số lần xuất hiện của từng vị trí. . Vị trí 'Chuyển tiếp' xảy ra 1 lần Vị trí 'Guard' xảy ra 3 lần Vị trí 'Trung tâm' xuất hiện 1 lần Làm cách nào để nhóm mảng đối tượng theo khóa trong MongoDB?Nhóm và đẩy các đối tượng trong mảng nếu chúng có cùng khóa trong tài liệu mongodb . $unwind giải cấu trúc mảng appInfos $group theo tài nguyên và app_key và xây dựng mảng siêu dữ liệu một lần nữa $group chỉ bằng tài nguyên và xây dựng lại mảng appInfos mà chúng tôi đã giải cấu trúc trong giai đoạn đầu tiên Tập hợp nhóm trong MongoDB là gì?Các thao tác tổng hợp trong MongoDB xử lý các bản ghi/tài liệu dữ liệu và trả về các kết quả được tính toán. Tính năng tổng hợp thu thập các giá trị từ nhiều tài liệu khác nhau, nhóm chúng lại rồi thực hiện các thao tác khác nhau như Tổng, Trung bình, Tối thiểu, Tối đa, v.v. trên dữ liệu được nhóm đó để trả về kết quả được tính toán. |