MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongodb Est-il possible d'agréger un objet ?

Puisque vous avez les valeurs dans un objet au lieu d'un tableau, vous devrez utiliser 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,
}

Si possible, vous devriez plutôt émettre les valeurs sous forme de tableau de type numérique car cela vous donne plus d'options (c'est-à-dire l'agrégation) et (sauf si l'ensemble de données est volumineux) probablement des avantages en termes de performances.