MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoid-Aggregationsmethoden für eingebettete Dokumente?

Ja, MapReduce würde funktionieren. Sie können auch Cursor verwenden, um ein Abfrageergebnis zu verarbeiten. Wie:

min = 99999999;
max = -99999999;
sum = 0;
count = 0
db.School.find({}).forEach(function(s) {
    if (s.first.events.first.cost < min)
        min = s.first.events.first.cost;
    if (s.first.events.first.cost > max)
        max = s.first.events.first.cost;
    sum += s.first.events.first.cost;
    ++count;
});

Sie haben jetzt das Minimum und das Maximum und können den Durchschnitt und den Mittelwert aus der Summe und der Anzahl berechnen.

Mongodb hat nicht die Möglichkeit, die Aggregatfunktionen in seiner Abfragesprache direkt zu berechnen. Tatsächlich ist diese Aussage nicht ganz richtig, da es die Funktion count() gibt, um die Anzahl der von einer Abfrage zurückgegebenen Ergebnisse zu zählen, und es gibt die Funktion group(). Aber die Gruppenfunktion ist MapReduce sehr ähnlich und kann nicht auf Sharding-Datenbanken verwendet werden. Bei Interesse an der Gruppenfunktion siehe:http://www. mongodb.org/display/DOCS/Aggregation#Aggregation-Group