代码之家  ›  专栏  ›  技术社区  ›  Vinoth

mongo query distinct with sum不工作

  •  4
  • Vinoth  · 技术社区  · 6 年前

    在这里,我更新了我的问题。 这是输入数据,可以使用此命令在本地数据库中插入:

    db.pms_teamleadtimesheets.insertMany( [
          { "Text" : "Analysis",
        "Comments" : "4",
        "TaskType" : "DELIVERY",
        "Items" : "Others",
        "StartDate" : "28-05-2018",
        "EndDate" : "2018-05-28",
        "Hours" : 240,
        "phase" : "Analysis",
        "ProjectID" : "5a042ba02af18ac8388bd3c0",
        "UserName" : "Admin",
        "FacilityID" : "59a53f0c6077b2a029c52b7f",
        "TaskID" : "5b0baafffb8df2401af90fea",
        "TaskDescription" : "Analysis",
        "IsBillable" : true
         },
          {  "Text" : "Analysis",
        "Comments" : "8",
        "TaskType" : "DELIVERY",
        "Items" : "Others",
        "StartDate" : "28-05-2018",
        "EndDate" : "2018-05-28",
        "Hours" : 240,
        "phase" : "Analysis",
        "ProjectID" : "5a042ba02af18ac8388bd3c0",
        "UserName" : "Admin",
        "FacilityID" : "59a53f0c6077b2a029c52b7f",
        "TaskID" : "5b0baafffb8df2401af90fea",
        "TaskDescription" : "Analysis",
        "IsBillable" : true
       },
          {"Text" : "Analysis",
        "Comments" : "2",
        "TaskType" : "DELIVERY",
        "Items" : "CRI",
        "StartDate" : "29-05-2018",
        "EndDate" : "2018-05-29",
        "Hours" : 120,
        "phase" : "Analysis",
        "ProjectID" : "5a042ba02af18ac8388bd3c0",
        "UserName" : "Admin",
        "FacilityID" : "59a53f0c6077b2a029c52b7f",
        "TaskID" : "5b0baafffb8df2401af90fea",
        "TaskDescription" : "Analysis",
        "IsBillable" : true
        },
           { "Text" : "Analysis",
        "Comments" : "2",
        "TaskType" : "DELIVERY",
        "Items" : "CRI",
        "StartDate" : "29-05-2018",
        "EndDate" : "2018-05-29",
        "Hours" : 120,
        "phase" : "Analysis",
        "ProjectID" : "5a042ba02af18ac8388bd3c0",
        "UserName" : "Admin",
        "FacilityID" : "59a53f0c6077b2a029c52b7f",
        "TaskID" : "5b0baafffb8df2401af90fea",
        "TaskDescription" : "Analysis",
        "IsBillable" : true }
       ] );
    

    从这个集合中,我要做Distinct和Sum。这里distinct工作正常,但总和不起作用。

    这是我使用的查询:

    db.Collection.aggregate([
            //where query
            { "$match": { UserName: "USER",FacilityID:"FID",ProjectID:"ID" } },
            //distinct column 
            { "$group": { _id: { ProjectID: "$ProjectID", Task: "$Text", Phase: "$phase", Comments: "$Comments", TaskType: "$TaskType", Items: "$Items", UserName: "$UserName", IsBillable: "$IsBillable", Date: "$StartDate", Hours:{$sum:"$Hours" } }} },
            //provide column name for the output
            { "$project": { _id: 0, ProjectID: "$_id.ProjectID" ,Phase: "$_id.Phase",Task: "$_id.Task",Comments: "$_id.Comments",TaskType: "$_id.TaskType",Items: "$_id.Items",UserName: "$_id.UserName",IsBillable: "$_id.IsBillable",Date: "$_id.Date",Hours:  { $divide: [ "$_id.Hours", 60 ] } } }
        ]);
    

    我得到这样的结果。它不计算值的总和。 enter image description here

    此处不添加总小时数。它应该返回4,但这里返回2。

    有人能帮我解决这个问题吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Abhijith S    6 年前

    $group阶段具有以下原型形式:

    { $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, ... } }
    

    您的字段1是 小时 蓄能器1 总和 , 因此,您的聚合应该如下所示:

    db.pms_teamleadtimesheets.aggregate(
    
      // Pipeline
      [
        // Stage 1
        {
          $match: {
          UserName:"Admin",
          FacilityID:"59a53f0c6077b2a029c52b7f",
          ProjectID:"5a042ba02af18ac8388bd3c0"
          }
        },
    
        // Stage 2
        {
          $group: {
             _id: { ProjectID: "$ProjectID",
                Task: "$Text", Phase: "$phase",
                Comments: "$Comments", 
                TaskType: "$TaskType", 
                Items: "$Items", 
                UserName: "$UserName", 
                IsBillable: "$IsBillable", 
                Date: "$StartDate"
                },
                Hours:{$sum:"$Hours" }
          }
        },
    
        // Stage 3
        {
          $project: {
           _id: 0,
           ProjectID: "$_id.ProjectID", 
           Phase: "$_id.Phase",
           Task: "$_id.Task",
           Comments: "$_id.Comments",
           TaskType: "$_id.TaskType",
           Items: "$_id.Items",
           UserName: "$_id.UserName",
           IsBillable: "$_id.IsBillable",
           Date: "$_id.Date",
           Hours:  { 
             $divide: [ "$Hours", 60 ] 
             } 
          }
        },
    
      ]
    );
    

    用给定的测试数据输出:

    { 
        "ProjectID" : "5a042ba02af18ac8388bd3c0", 
        "Phase" : "Analysis", 
        "Task" : "Analysis", 
        "Comments" : "2", 
        "TaskType" : "DELIVERY", 
        "Items" : "CRI", 
        "UserName" : "Admin", 
        "IsBillable" : true, 
        "Date" : "29-05-2018", 
        "Hours" : 4.0
    }
    { 
        "ProjectID" : "5a042ba02af18ac8388bd3c0", 
        "Phase" : "Analysis", 
        "Task" : "Analysis", 
        "Comments" : "8", 
        "TaskType" : "DELIVERY", 
        "Items" : "Others", 
        "UserName" : "Admin", 
        "IsBillable" : true, 
        "Date" : "28-05-2018", 
        "Hours" : 4.0
    }
    { 
        "ProjectID" : "5a042ba02af18ac8388bd3c0", 
        "Phase" : "Analysis", 
        "Task" : "Analysis", 
        "Comments" : "4", 
        "TaskType" : "DELIVERY", 
        "Items" : "Others", 
        "UserName" : "Admin", 
        "IsBillable" : true, 
        "Date" : "28-05-2018", 
        "Hours" : 4.0
    }
    

    进一步阅读 here