【问题标题】:Get Distinct value using mongodb使用 mongodb 获取不同的值
【发布时间】:2017-09-28 20:58:32
【问题描述】:

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

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

上述查询在按持续时间分组时执行用户名。持续时间会有所不同,因为它根据持续时间显示用户名。

【问题讨论】:

  • 能否请edit您的问题包括集合中的一些示例文档和您预期的输出文档?
  • 请添加符合您查询的文档。例如:FacilityID 不在文档中。
  • 基于我选择用户的 FacilityID。这不是必需的。

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

您需要将$sum 累加器应用于$Duration,而不是将其包含在$group_id 中:

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

【讨论】:

  • 非常感谢@JohnnyHK
  • 是的。我已通过单击勾号标记为答案
猜你喜欢
  • 2020-06-29
  • 2015-11-18
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多