使用mongodb获取不同的值

使用mongodb获取不同的值,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我正在使用一个表,其中包含该用户的用户名和工作持续时间。集合对于同一用户有多个持续时间小时。我想显示不同的用户名和该用户名的持续时间小时数之和 db.collection.aggregate([ { "$match": { FacilityID: '59a53f0c6077b2a029c52b7f', ProjectID: '59c1171f734bcb3038e2bb67'} }, { "$group": { _id: { TeamMemberUserID: "$

我正在使用一个表,其中包含该用户的用户名和工作持续时间。集合对于同一用户有多个持续时间小时。我想显示不同的用户名和该用户名的持续时间小时数之和

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} }
])
它显示用户名3次并显示

siva 40
siva 40
siva 40
对于该用户,不同类型的工作有不同的持续时间,例如:20小时用于设计,10小时用于编码,10小时用于测试

但是我想向用户显示他所有工作的总持续时间

User Name:    Phase       duration
Siva          Testing      10
siva          Coding       10
siva          Designing    20
预期输出:

Siva 40
上面的查询在按持续时间小时分组时执行用户名。持续时间小时数有所不同,因为它根据持续时间显示用户名。

您需要将累加器应用于
$duration
,而不是将其包含在
$group
\u id
中:

db.collection.aggregate([       
    { "$match": { FacilityID: '59a53f0c6077b2a029c52b7f', ProjectID: '59c1171f734bcb3038e2bb67'} },
    { "$group": { _id: "$TeamMemberUserID", Duration: {$sum: "$Duration"} } },
    { "$project": { TeamMemberUserID: "$_id", _id: 0, Duration: 1 } }
])
您需要将累加器应用于
$Duration
,而不是将其包含在
$group
\u id
中:

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

能否请您的问题包括集合中的一些示例文档和预期的输出文档?请添加与您的查询匹配的文档。例如:
FacilityID
不在文档中。我将根据FacilityID选择用户。这是不需要的。请将您的问题包含在集合中的一些示例文档和预期的输出文档中,好吗?请添加与您的查询匹配的文档。例如:
FacilityID
不在文档中。我将根据FacilityID选择用户。这是不需要的。非常感谢@johnykyes当然。我已经通过点击勾号符号标记为答案了很多@Johnnykyes sure。我已通过单击勾号符号标记为答案