MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb Czy można agregować obiekt?

Ponieważ masz wartości w obiekcie zamiast w tablicy, musisz użyć 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,
}

Jeśli to w ogóle możliwe, powinieneś emitować wartości jako tablicę typu liczbowego, ponieważ daje to więcej opcji (tj. agregacji) i (chyba że zestaw danych jest duży) prawdopodobnie poprawia wydajność.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. apollostack/graphql-server - jak uzyskać pola żądane w zapytaniu z resolvera

  2. Jak zoptymalizować wydajność MongoDB

  3. Czy można spłaszczyć zapytanie wynikowe MongoDB?

  4. Spring Data Mongo:upsert z różnymi polami zaktualizowanymi

  5. Jak mogę wykryć niepowodzenie ponownego połączenia mongodb?