Bạn có thể sử dụng Đường ống tổng hợp
để thêm các trường được tính toán vào một kết quả. Dưới đây là một số ví dụ sử dụng mongo
shell, nhưng cú pháp trong trình trợ giúp Aggregate ()
của Mongoose tương tự.
Ví dụ:để tính tổng (trên mỗi tài liệu người dùng), bạn có thể sử dụng $add
biểu thức
trong $project
sân khấu
:
db.user.aggregate(
// Limit to relevant documents and potentially take advantage of an index
{ $match: {
user_id: "foo"
}},
{ $project: {
user_id: 1,
total: { $add: ["$user_totaldocs", "$user_totalthings"] }
}}
)
Để tính tổng trên nhiều tài liệu, bạn cần sử dụng nhóm $group
sân khấu
với $sum
bộ tích lũy
, ví dụ:
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Bạn có thể chỉ muốn một total
đồng ruộng; Tôi đã thêm vào totaldocs
và totalthings
làm ví dụ về tính toán nhiều trường.
Một nhóm _id
trong tổng số null
sẽ kết hợp các giá trị từ tất cả các tài liệu được chuyển đến $group
nhưng bạn cũng có thể sử dụng các tiêu chí khác tại đây (chẳng hạn như nhóm theo user_id
).