Можете да използвате тръбопровода за агрегиране
за добавяне на изчислени полета към резултат. По-долу има някои примери за използване на mongo
shell, но синтаксисът в помощника на Mongoose()
е подобен.
Например, за да изчислите суми (на потребителски документ), можете да използвате $add
израз
в $project
етап
:
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"] }
}}
)
За да изчислите суми в множество документи, трябва да използвате $group
етап
с $sum
акумулатор
, например:
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Може да искате само един total
поле; Добавих в totaldocs
и totalthings
като примери за изчисляване на множество полета.
Групов _id
от null
ще комбинира стойности от всички документи, предадени на $group
етап, но можете да използвате и други критерии тук (като групиране по user_id
).