sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb Er det muligt at aggregere et objekt?

Da du har værdierne i et objekt i stedet for et array, skal du bruge 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,
}

Hvis det overhovedet er muligt, bør du i stedet udsende værdierne som en matrix af en numerisk type, da det giver dig flere muligheder (dvs. aggregering) og (medmindre datasættet er stort) sandsynligvis ydeevnefordele.



  1. MongoDB sum arrays fra flere dokumenter på en per-element basis

  2. MongoError:databasenavne kan ikke indeholde tegnet ' ', når du bruger mongoosejs connect til mLab

  3. Forespørgselsudførelse mislykkedes ved kørsel af Mongo-kommando gennem bash-script

  4. Tæl antal kommentarer i indlæg i Meteor