Làm cách nào để tổng hợp một bộ sưu tập trong mongodb?

Trong phần này, chúng ta sẽ thử giải câu đố Mongodb-Query-To-Sum-Specific-Fields bằng cách sử dụng ngôn ngữ máy tính. Đoạn mã sau đây sẽ chứng minh điểm này

> db.getSumOfFieldsDemo.aggregate([ { $match: { Status: "Active" } }, { $group: { _id: "$Customer_Id", TotalSum: { $sum: "$Price" } } } ]);

Như chúng ta đã thấy, vấn đề với biến Mongodb-Query-To-Sum-Specific-Fields đã được giải quyết bằng cách sử dụng nhiều trường hợp khác nhau

Làm cách nào để tính tổng các trường trong MongoDB?

Nếu được sử dụng trên một trường chứa cả giá trị số và không phải số, thì $sum sẽ bỏ qua các giá trị không phải là số và trả về tổng của các giá trị số. Nếu được sử dụng trên một trường không tồn tại trong bất kỳ tài liệu nào trong bộ sưu tập, $sum trả về 0 cho trường đó. Nếu tất cả các toán hạng không phải là số, $sum trả về 0

MongoDB tính tổng tiền lương như thế nào?

Toán tử $sum trả về tổng của tất cả các giá trị số của tài liệu trong bộ sưu tập trong MongoDB. Ở trên sẽ tạo bộ sưu tập (hoặc bảng) (nếu bộ sưu tập đã tồn tại, nó sẽ chèn tài liệu vào đó). Bước 2. 1 – Chúng ta sẽ nhóm nhân viên theo FirstName và tìm tổng lương của từng nhóm

Dự án $ trong MongoDB là gì?

Sự định nghĩa. dự án $. Chuyển các tài liệu có các trường được yêu cầu sang giai đoạn tiếp theo trong quy trình. Các trường được chỉ định có thể là các trường hiện có từ các tài liệu đầu vào hoặc các trường mới được tính toán

Thư giãn trong MongoDB là gì?

MongoDB $unwind là gì? . 02-Dec-2020

Tổng hợp là gì?

Tổng Số có nghĩa là tổng của Tổng Tín dụng Trả chậm và Tổng Tín dụng Trả lãi

Làm thế nào để bạn tổng hợp trong cầy mangut?

Tập hợp trong MongoDB cung cấp một loạt các toán tử rất hữu ích. Một toán tử như vậy là $sum. Như tên cho thấy, toán tử $sum được sử dụng để lấy tổng các giá trị số. Nó thường được sử dụng với $match và $group. 28-Jan-2020

Cái nào báo cho hàm chỉ tổng hợp các giá trị riêng biệt?

RIÊNG BIỆT. Nó báo cho hàm chỉ tổng hợp các giá trị riêng biệt. Cú pháp của hàm SUM() trong SQL Server được đưa ra bên dưới

  • CHỌN TỔNG ( DISTINCT tổng hợp_biểu thức)
  • TỪ tên_bảng
  • [điều kiện NƠI];

Làm thế nào để bạn tính tổng tiền lương trong SQL?

Ví dụ – Với một biểu thức SELECT SUM(salary) AS "Total Lương" TỪ các nhân viên WHERE lương > 25000; . Do đó, "Tổng Lương" sẽ hiển thị dưới dạng tên trường khi tập kết quả được trả về

Làm cách nào tôi có thể nhận được tổng số trong MongoDB?

n = count( conn , collection ) trả về tổng số tài liệu trong một bộ sưu tập bằng cách sử dụng kết nối giao diện MongoDB® C++. n = count( conn , collection ,Query= mongoquery ) trả về tổng số tài liệu trong một truy vấn MongoDB đã thực thi trên một bộ sưu tập

$$ root trong MongoDB là gì?

Biến $$ROOT chứa các tài liệu nguồn cho nhóm. Nếu bạn muốn chuyển chúng qua trạng thái không sửa đổi, bạn có thể thực hiện việc này bằng cách $đẩy $$ROOT vào đầu ra từ nhóm

Tôi chưa quen với mongodb và có thể tôi đang thiếu thứ gì đó. Nhưng có rất nhiều mẫu trên internet, vẫn gặp sự cố khi lấy tổng trên một trường là một phần của mảng đối tượng. Đây là những gì tôi đang làm

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])

cố gắng để có được tổng số tiền theo những cách khác nhau

db.collection.aggregate([
{$group:{_id:null, TotalBalance:{$sum:"$balance.amount"}}}
])

lấy số dư 0 thay vì -2300

{ "_id" : null, "TotalBalance" : 0 }

những điều tương tự với $unwind

db.collection.aggregate([
{$unwind:"$balance"},
{$group:{_id:null, TotalBalance:{$sum:"$balance.amount"}}}
])

những gì tôi đang làm sai?

Cảm ơn

Trong MongoDB, toán tử đường dẫn tổng hợp

{ $sum: [ ,  .. ]  }
7 tính toán và trả về tổng các giá trị số

cú pháp

Toán tử

{ $sum: [ ,  .. ]  }
7 hỗ trợ hai cú pháp

Cú pháp 1

{ $sum:  }

Cú pháp 2

{ $sum: [ ,  .. ]  }

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

{ $sum: [ ,  .. ]  }
9, bạn chỉ có thể sử dụng cú pháp đầu tiên. Trong trường hợp này,
{ $sum: [ ,  .. ]  }
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óa

Ví 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óm

Ví dụ này sử dụng

{ $sum: [ ,  .. ]  }
7 kết hợp với
{ $sum: [ ,  .. ]  }
9 để trả về tổng trên một nhóm tài liệu được nhóm theo khóa

Giả sử chúng ta có một bộ sưu tập tên là

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
33 với các tài liệu sau

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
3

Chúng tôi có thể nhóm các tài liệu này theo trường

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
34 của chúng, sau đó sử dụng
{ $sum: [ ,  .. ]  }
7 để trả về tổng của trường
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
36 cho mỗi nhóm

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
8

Kết quả

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
9

Mảng

Ví dụ này áp dụng

{ $sum: [ ,  .. ]  }
7 cho một tài liệu có chứa một trường có một mảng 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à

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
38 với các tài liệu sau

db.collection.aggregate([
{$group:{_id:null, TotalBalance:{$sum:"$balance.amount"}}}
])
2

Chúng ta có thể áp dụng

{ $sum: [ ,  .. ]  }
7 cho trường
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
80 trong mỗi tài liệu

db.collection.aggregate([
{$group:{_id:null, TotalBalance:{$sum:"$balance.amount"}}}
])
5

Kết quả

db.collection.aggregate([
{$group:{_id:null, TotalBalance:{$sum:"$balance.amount"}}}
])
6

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ề

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
81 vì chúng tôi đã cung cấp một mảng trống

Tài liệu 6 đã trả lại

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
81 vì chúng tôi đã cung cấp
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
83 làm đối số

Tài liệu 7 trả về

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
81 vì trường thậm chí không tồn tại

Ví dụ về Cú pháp 2 (Nhiều đối số)

Cú pháp thứ hai liên quan đến việc cung cấp cho

{ $sum: [ ,  .. ]  }
7 nhiều hơn một đối số.
{ $sum: [ ,  .. ]  }
7 sau đó tính tổng dựa trên tất cả các đối số được cung cấp

Giả sử chúng ta có một bộ sưu tập tên là

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
87 với các tài liệu sau

{ "_id" : null, "TotalBalance" : 0 }
4

Chúng ta có thể sử dụng

{ $sum: [ ,  .. ]  }
7 để trả về tổng của các trường ________ 189, ________ 190, ________ 191 và ________ 192 của mỗi tài liệu

db.collection.aggregate([
{$unwind:"$balance"},
{$group:{_id:null, TotalBalance:{$sum:"$balance.amount"}}}
])
0

Kết quả

{ $sum: [ ,  .. ]  }
0

Tài liệu 1 trả về tổng giá trị đầu vào của

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
93,
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
94,
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
95 và
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
96

Tuy nhiên, hai tài liệu tiếp theo chỉ trả về tổng giá trị đầu vào của

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
93,
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
94 và
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
95. Toán tử
{ $sum: [ ,  .. ]  }
7 đã bỏ qua các trường
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
92 của họ

Điều này là do

{ $sum: [ ,  .. ]  }
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
db.collection.aggregate([
{$group:{_id:null, TotalBalance:{$sum:"$balance.amount"}}}
])
23 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

db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
92 của nó chứa một mảng. Như đã đề cập, toán tử
{ $sum: [ ,  .. ]  }
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à
{ $sum: [ ,  .. ]  }
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ì

{ $sum: [ ,  .. ]  }
7 trả về
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
81. Chúng ta có thể thấy điều này với tài liệu 4

Các trường bị thiếu

Khi sử dụng cú pháp nhiều đối số,

{ $sum: [ ,  .. ]  }
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ề
db.collection.insertMany([
{ "id" : "6002010011500", "balance" : [ { "type" : "PR", "amount" : "1000" 
}, { "type" : "IN", "amount" : "300" } ] },
{"id" :  "5001010001005", "balance": [ { "type" : "PR", "amount" : "-3000" 
}, { "type" : "IN", "amount" : "-600" } ] }
])
81

Thí dụ

{ $sum: [ ,  .. ]  }
1

Kết quả

{ $sum: [ ,  .. ]  }
0

Trong trường hợp này, tôi đã cung cấp thêm một trường (_______251) không tồn tại trong tài liệu.

{ $sum: [ ,  .. ]  }
7 đã tính tổng dựa trên các trường còn lại tồn tại

Tổng hợp là gì?

Tổng số có nghĩa là tổng của Tổng số tín dụng trả chậm và Tổng số tiền lãi tín dụng .

MongoDB tính tổng tiền lương như thế nào?

$sum toán tử trả về tổng của tất cả các giá trị số của tài liệu trong bộ sưu tập trong MongoDB . Ở trên sẽ tạo bộ sưu tập (hoặc bảng) (nếu bộ sưu tập đã tồn tại, nó sẽ chèn tài liệu vào đó). Bước 2. 1 - Chúng tôi sẽ nhóm nhân viên theo FirstName và tìm tổng tiền lương của từng nhóm.

Bạn có thể sử dụng Tìm và tổng hợp trong MongoDB không?

Để tạo một quy trình tổng hợp, bạn có thể sử dụng phương thức tổng hợp () của MongoDB . Phương thức này sử dụng một cú pháp khá giống với phương thức find() được sử dụng để truy vấn dữ liệu trong một bộ sưu tập, nhưng tổng hợp() chấp nhận một hoặc nhiều nghệ danh làm đối số.

Làm cách nào tôi có thể nhận được tổng số trong MongoDB?

n = count( conn , collection ) trả về tổng số tài liệu trong một bộ sưu tập bằng cách sử dụng kết nối giao diện MongoDB® C++. n = count( conn , collection ,Query= mongoquery ) trả về tổng số tài liệu trong một truy vấn MongoDB đã thực thi trên một bộ sưu tập.