MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb Ist es möglich, ein Objekt zu aggregieren?

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.