Da Sie die Werte in einem Objekt statt in einem Array haben, müssen Sie mapReduce verwenden.
// 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,
}
Wenn überhaupt möglich, sollten Sie die Werte stattdessen als Array eines numerischen Typs ausgeben, da Sie dadurch mehr Optionen (z. B. Aggregation) und (sofern der Datensatz nicht groß ist) wahrscheinlich Leistungsvorteile erhalten.