MongoDB - group()

werdas34

Benutzer
Beiträge
12
Hallo,

ich habe folgende Aufgabe bekommen:
Gruppierung: Die Anzahlen der Forscher und die durchschnittliche Wochenarbeitszeit der Forscher pro Uni.
(group()-Methode mit den Parametern key, initial, result und finalize).
(Vorgehensweise: zunächst die Anzahl der Forscher berechnen (key, intitial, result), dann die Anfrage um die Berechnung der Summen der Arbeitszeiten der Forscher erweitern (wiederum key, initial, result), dann die Anfrage um die Berechnung der Durchschnitte der Summen der Arbeitszeiten der Forscher erweitern (wiederum key, initial, result und zusätzlich finalize). Ich schätze statt result sollte reduce stehen.

Nun nach dem ersten Schritt sieht es so:
Code:
db.forscher.group({
   key: {uniname:1},
   reduce: function(cur, result) {result.fname += 1; },
   initial: {fname: 0 },
   key: {uniname:2},
})
Das Ergebnis ist richtig:

Nun erweitere ich es um den zweiten Schritt:
Code:
db.forscher.group({
   key: {uniname:1},
   reduce: function(cur, result) {result.fname += 1; },
   initial: {fname: 0 },
   key: {uniname:2},
   reduce: function(cur, result) {result.wochenarbeitszeit += cur.wochenarbeitszeit;},
   initial: {wochenarbeitszeit: 0 }
})
Da wird mir nur der Uniname, aber nicht die Anzahl der Forscher ausgegeben. Obwohl die vorherige Abfrage stimmt.
Wie mache ich das, damit beide rauskommen? Finde im Internet nichts dazu, außer die Dokumentation von MongoDB und Beispiele für das aggragate-Framework.
Oder muss man da dann eine eigene Abfrage schreiben und die zusammenfügen? Aber wie? Im Skript steht dazu auch nichts.

Kann mir dann jemand zusätzlich verraten, wozu ich finalize am Ende brauche?
Mit dem letzten reduce würde ich dann die Wochenarbeitszeit geteilt der Anzahl der Forscher berechnen.
Was steht dann in der function von finalize drin?

Datensatz:
Code:
db.forscher.insert ( {
     fname: "Galilei",
     gebdatum: "1648-01-21",
     uniname: "TU Muenchen",
     einstelldatum: "1696-02-23",
     projektname: "Mond",
     wochenarbeitszeit: 40
} );

db.forscher.insert ( {
     fname: "Newton",
     gebdatum: "1712-02-10",
     uniname: "HS Landshut",
     einstelldatum: "1741-03-11",
     projektname: "Kometen",
     wochenarbeitszeit: 15
} );

db.forscher.insert ( {
     fname: "Einstein",
     gebdatum: "1888-05-21",
     uniname: "HS Rosenheim",
     einstelldatum: "1912-07-04",
     projektname: "Jupiter",
     wochenarbeitszeit: 4
} );

db.forscher.insert ( {
     fname: "Nernst",
     gebdatum: "1928-07-12",
     uniname: "HS Landshut",
     einstelldatum: "1939-08-01",
     projektname: "Sonne",
     wochenarbeitszeit: 21
} );

db.forscher.insert ( {
     fname: "Sommerfeld",
     gebdatum: "1899-11-16",
     uniname: "Uni Passau",
     einstelldatum: "1934-12-09",
     projektname: "Sonne",
     wochenarbeitszeit: 15
} );

db.forscher.insert ( {
     fname: "Planck",
     gebdatum: "1848-05-07",
     uniname: "TU Muenchen",
     einstelldatum: "1871-11-15",
     projektname: "Milchstrasse",
     wochenarbeitszeit: 30
} );

db.forscher.insert ( {
     fname: "Sandage",
     gebdatum: "1923-01-09",
     uniname: "HS Rosenheim",
     einstelldatum: "1946-02-25",
     projektname: "Centauri",
     wochenarbeitszeit: 3
} );

db.forscher.insert ( {
     fname: "Leibnitz",
     gebdatum: "1723-07-11",
     uniname: "HS Landshut",
     einstelldatum: "1753-04-11",
     projektname: "Hubble",
     wochenarbeitszeit: 8
} );

db.forscher.insert ( {
     fname: "Cassini",
     gebdatum: "1543-04-16",
     uniname: "TU Muenchen",
     einstelldatum: "1526-04-30",
     projektname: "Mond",
     wochenarbeitszeit: 40
} );

db.forscher.insert ( {
     fname: "Kepler",
     gebdatum: "1601-03-19",
     uniname: "TU Muenchen",
     einstelldatum: "1631-11-01",
     projektname: "Pluto",
     wochenarbeitszeit: 19
} );

db.forscher.insert ( {
     fname: "Herschel",
     gebdatum: "1702-12-25",
     uniname: "HS Deggendorf",
     einstelldatum: "1744-09-15",
     projektname: "Sonne",
     wochenarbeitszeit: 20
} );

db.forscher.insert ( {
     fname: "Petrarca",
     gebdatum: "1248-04-23",
     uniname: "TU Muenchen",
     einstelldatum: "1296-08-30",
     projektname: "Mond",
     wochenarbeitszeit: 40
} );

db.forscher.insert ( {
     fname: "Erasmus",
     gebdatum: "1648-01-21",
     uniname: "HS Deggendorf",
     einstelldatum: "1696-02-23",
     projektname: "Mond",
     wochenarbeitszeit: 40
} );

db.forscher.insert ( {
     fname: "Gauss",
     gebdatum: "1697-08-01",
     uniname: "Uni Passau",
     einstelldatum: "1733-02-07",
     projektname: "Pulsare",
     wochenarbeitszeit: 6
} );

db.forscher.insert ( {
     fname: "Lavoisier",
     gebdatum: "1745-07-22",
     uniname: "TU Muenchen",
     einstelldatum: "1777-04-27",
     projektname: "Milchstrasse",
     wochenarbeitszeit: 25
} );

db.forscher.insert ( {
     fname: "Baade",
     gebdatum: "1901-09-16",
     uniname: "Uni Passau",
     einstelldatum: "1931-02-22",
     projektname: "Centauri",
     wochenarbeitszeit: 10
} );
 
Werbung:
Zurück
Oben