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 ).