sql >> Database >  >> NoSQL >> MongoDB

Mongodb Is het mogelijk om een ​​object te aggregeren?

Aangezien u de waarden in een object hebt in plaats van in een array, moet u mapReduce gebruiken.

// 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,
}

Als het enigszins mogelijk is, zou u de waarden in plaats daarvan moeten weergeven als een array van een numeriek type, aangezien dat u meer opties geeft (dwz aggregatie) en (tenzij de dataset groot is) waarschijnlijk prestatievoordelen.



  1. Redis Pub/Sub ServiceStack, de discussie annuleren

  2. MongoDb upsert uitzondering ongeldig BSON-veld

  3. MongoDB - Toevoegen aan een set en verhogen

  4. Mongoose:vul een ingevuld veld in