2017-09-28 4 views
1

Ich verwende eine Tabelle mit Benutzername und Arbeitsdauer des Benutzers. Die Sammlung hat mehrere Stunden für den gleichen Benutzer. Ich möchte den eindeutigen Benutzernamen und die Summe der Dauerstunden für diesen Benutzernamen anzeigen.Get Distinct-Wert mit mongodb

db.collection.aggregate([  
    { "$match": { FacilityID: '59a53f0c6077b2a029c52b7f', ProjectID: '59c1171f734bcb3038e2bb67'} }, 
    { "$group": { _id: { TeamMemberUserID: "$TeamMemberUserID",Duration: "$Duration"}} }, 
    { "$project": { TeamMemberUserID: "$_id.TeamMemberUserID", _id: 0, Duration: "$_id.Duration", _id: 0} } 
]) 

es Benutzername 3 mal angezeigt wird und

siva 40 
siva 40 
siva 40 

für den Benutzer zeigt hat unterschiedliche Dauer für andere Art von Arbeit wie: 20 Stunden für den Entwurf, 10 Stunden für die Codierung, 10 für die Prüfung.

aber ich möchte den Benutzer mit der Summe der Dauer Stunden aller seiner Arbeit anzeigen.

User Name: Phase  duration 
Siva   Testing  10 
siva   Coding  10 
siva   Designing 20 

Erwartet Ausgabe:

Siva 40 

Die obige Abfrage Benutzername ausführt, während sie mit Dauer Stunden Gruppierung. Die Dauer der Stunden variiert, da der Benutzername entsprechend der Dauer angezeigt wird.

+0

Können Sie bitte [Bearbeiten] Ihre Frage einige Beispieldokumente aus der Sammlung und Ihre erwartete Ausgabe enthalten Unterlagen? – chridam

+0

Fügen Sie die Dokumente hinzu, die Ihrer Suchanfrage entsprechen. Zum Beispiel: 'FacilityID' ist nicht im Dokument vorhanden. – Veeram

+0

basierend auf der FacilityID wähle ich den Benutzer. Das ist nicht nötig. – N15

Antwort

0

Sie müssen den $sum Akkumulator $Duration statt einschließlich es in der _id des anzuwenden $group:

db.collection.aggregate([  
    { "$match": { FacilityID: '59a53f0c6077b2a029c52b7f', ProjectID: '59c1171f734bcb3038e2bb67'} }, 
    { "$group": { _id: "$TeamMemberUserID", Duration: {$sum: "$Duration"} } }, 
    { "$project": { TeamMemberUserID: "$_id", _id: 0, Duration: 1 } } 
]) 
+0

Vielen Dank @JohnnyHK – N15

+0

ja sicher. Ich habe als Antwort markiert, indem ich auf das Häkchen-Symbol klicke – N15