sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb Är det möjligt att aggregera ett objekt?

Eftersom du har värdena i ett objekt istället för en array, måste du använda 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,
}

Om det överhuvudtaget är möjligt bör du avge värdena som en matris av en numerisk typ istället eftersom det ger dig fler alternativ (dvs. aggregering) och (om inte datamängden är stor) förmodligen prestandafördelar.



  1. Meteor/MongoDB se tillgängliga fält för publicering?

  2. Mongoid::Versionering - hur kontrollerar man tidigare versioner?

  3. Hur ringer jag till mongodb i mina kart-/reduceringsfunktioner? Är det en bra praxis?

  4. Behöver lagra hög precision decimalvärden i MongoDB