2017-09-28 4 views
1

J'utilise une table qui a le nom d'utilisateur et la durée de travail de cet utilisateur. La collection a plusieurs heures de durée pour le même utilisateur. Je veux afficher le nom d'utilisateur distinct et la somme des heures de durée pour ce nom d'utilisateur.Get valeur distincte en utilisant 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} } 
]) 

il affiche le nom d'utilisateur 3 fois et montrant

siva 40 
siva 40 
siva 40 

pour cet utilisateur a une durée différente pour différents types de travaux comme: 20 heures pour la conception, 10 heures pour le codage, 10 pour les essais.

mais je veux afficher l'utilisateur avec la somme des heures de tous ses travaux.

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

sortie Expecting:

Siva 40 

La requête ci-dessus le nom d'utilisateur d'exécuter tout regroupement avec les heures de durée. La durée des heures varie en raison de l'affichage du nom d'utilisateur en fonction de la durée.

+0

Pouvez-vous s'il vous plaît [modifier] votre question d'inclure quelques exemples de documents de la collection et votre résultat attendu documents? – chridam

+0

Veuillez ajouter les documents qui correspondent à votre requête. Par exemple: 'FacilityID' n'est pas présent dans le document. – Veeram

+0

basé sur le FacilityID Je sélectionne l'utilisateur. Ce n'est pas nécessaire. – N15

Répondre

0

Vous devez appliquer l'accumulateur $sum-$Duration au lieu de l'inclure dans la _id du $group:

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

Merci beaucoup @JohnnyHK – N15

+0

oui sûr. J'ai marqué comme réponse en cliquant sur le symbole de la tique – N15