Możesz użyć potoku agregacji
aby dodać pola obliczeniowe do wyniku. Poniżej znajduje się kilka przykładów użycia mongo
powłoki, ale składnia w pomocniku Aggregate()
jest podobny.
Na przykład, aby obliczyć sumy (na dokument użytkownika), możesz użyć $add
wyrażenie
w $project
scena
:
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"] }
}}
)
Aby obliczyć sumy w wielu dokumentach, musisz użyć $group
scena
z $sum
akumulator
, na przykład:
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Możesz potrzebować tylko jednego total
pole; Dodałem w totaldocs
i totalthings
jako przykłady obliczania wielu pól.
Grupa _id
z null
połączy wartości ze wszystkich dokumentów przekazanych do $group
etap, ale możesz tu również użyć innych kryteriów (takich jak grupowanie według user_id
).