Nó không hoạt động chính xác vì nó đang tổng hợp tất cả các tài liệu trong bộ sưu tập; bạn đang nhóm trên một hằng số "_id":"tempId"
, bạn chỉ cần tham chiếu đúng khóa bằng cách thêm $
như:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
về bản chất là phiên bản đường ống một giai đoạn của hoạt động tổng hợp với một trường bổ sung chứa biểu thức tổng trước đường ống nhóm, sau đó gọi trường đó là <
toán tử trong nhóm. code>$sum
Ở trên hoạt động vì $ sum
từ MongoDB 3.2+ có sẵn trong cả $ project
và $ group
các giai đoạn và khi được sử dụng trong $ project
giai đoạn, $ sum
trả về tổng của danh sách các biểu thức. Biểu thức "$ messages.data.value"
trả về danh sách các số [120, 1200]
sau đó được sử dụng làm $ sum
biểu thức:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])