Anda dapat menggunakan Aggregation Pipeline
untuk menambahkan bidang terhitung ke hasil. Ada beberapa contoh di bawah ini menggunakan mongo shell, tetapi sintaks dalam Aggregate() helper
Mongoose mirip.
Misalnya, untuk menghitung jumlah (per dokumen pengguna), Anda dapat menggunakan $add ekspresi
dalam $project panggung
:
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"] }
}}
)
Untuk menghitung total di beberapa dokumen, Anda perlu menggunakan $group panggung
dengan $sum akumulator
, misalnya:
db.user.aggregate(
{ $group: {
_id: null,
total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } },
totaldocs: { $sum: "$user_totaldocs" },
totalthings: { $sum: "$user_totalthings" }
}}
)
Anda mungkin hanya menginginkan satu totalthings bidang; Saya telah menambahkan totaldocs dan totalthings sebagai contoh penghitungan beberapa bidang.
Grup _id dari null akan menggabungkan nilai dari semua dokumen yang diteruskan ke $group tahap, tetapi Anda juga dapat menggunakan kriteria lain di sini (seperti pengelompokan berdasarkan user_id ).