Vì bạn có các giá trị trong một đối tượng thay vì một mảng, bạn sẽ cần sử dụng mapReduce.
// Emit the values as integers
var mapFunction =
function() {
for (key in this.packets) {
emit(null, parseInt(this.packets[key]));
}
}
// Reduce to a simple sum
var reduceFunction =
function(key, values) {
return Array.sum(values);
}
> db.collection.mapReduce(mapFunction, reduceFunction, {out: {inline:1}})
{
"results" : [
{
"_id" : null,
"value" : 2381
}
],
"ok" : 1,
}
Nếu có thể, bạn nên phát ra các giá trị dưới dạng một mảng kiểu số vì điều đó cung cấp cho bạn nhiều tùy chọn hơn (tức là tổng hợp) và (trừ khi tập dữ liệu lớn) có thể mang lại lợi ích về hiệu suất.