Mongo 查询 Distinct 与 Sum 不起作用

2023-12-01

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

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 不起作用。

这是我使用过的查询:

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 ] } } }
    ]);

I am getting the result like this. It does not calculating the sum of the value. enter image description here

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

谁能帮我解决这个问题吗?


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

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

你的 field1 是Hours累加器1是sum, 因此你的聚合应该是这样的:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongo 查询 Distinct 与 Sum 不起作用 的相关文章

  • MongoDB $geoIntersects 不适用于包含负顶点的多边形

    我已在数据库中存储了跨越 x 轴和 y 轴的多边形 并且我想搜索包含给定点的多边形 为此 我使用 geoIntersects 运算符来指定一个点 但是 当多边形穿过轴时 MongoDB 不会返回任何多边形 我可以对查询或架构进行任何小的更改
  • 检索 mongoDB 文档中的空数组或 null

    我有我学校所有学生的收藏 每个文档都有一个sports列出每个学生从事的运动的数组属性 但该属性可能显示为sports or sports null或者根本不出现 如何检索属于上述三种情况之一的所有文件 如何向只有一项运动但未表示为数组的学
  • Mongodb 数据库上的 SASL 身份验证失败

    我在尝试使用 PHP Mongodb 驱动程序连接到 Mongodb 时遇到问题 实际上我有一个名为 LRS 的数据库 它有一个名为 juano 的用户 在我的设置文件中带有密码 12345 我确信我编写了正确的配置 但是当我在 Larav
  • MongoDB,从数组中删除对象

    Doc id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name 24 有没有办法从数组中提取特定对象 IE
  • 为 Meteor 数据创建编号列表

    有没有办法获取 Meteor 集合中项目的编号列表的 编号 我知道我可以在 html 中做到这一点 但我觉得如果我可以在 spacebars 中放置一些东西 那么样式会更容易 如果我可以使用更好的术语 请告诉我 像这样的东西 前 20 部电
  • Mongodump之后,调用MongoRestore挂起

    我们正在尝试在相对较小的数据库上做一个简单的 MongoDump 我们的步骤很简单 export 从目标机器上删除现有数据库 在目标机器上导入 MongoDump 完美执行 mongodump out root mongo prod DB
  • Pymongo 批量插入

    我正在尝试批量插入文档 但批量插入时不会插入超过 84 个文档 给我这个错误 in insert pymongo errors InvalidOperation cannot do an empty bulk insert 是否可以批量插入
  • 在 MongoDB 聚合的“addField”操作中使用“$count”

    我正在尝试找到聚合运算符的正确组合 以将标题为 totalCount 的字段添加到我的 mongoDB 视图中 这将为我提供聚合管道特定阶段的计数 并将其输出为每个文档的计数结果 count count 但最终我得到了一个具有此结果的文档
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • 使用填充方法在 sails mongo 中进行深层关联?

    我是 sails js 的新手 我正在使用 sails js 与 Mongodb 我在我的 sails 应用程序中使用 populate 进行深层关联时遇到问题 我有这样的关系 Category has many to many relat
  • 是否可以提高 Mongoexport 速度?

    我有一个 1 3 亿行的 MongoDB 3 6 2 0 集合 它有几个简单的字段和 2 个带有嵌套 JSON 文档的字段 数据以压缩格式 zlib 存储 我需要尽快将其中一个嵌入字段导出为 JSON 格式 然而 mongoexport 需
  • Mongodb MapReduce 选择最新日期

    我似乎无法让我的 MapReduce 缩减功能正常工作 这是我的地图功能 function Map day Date UTC this TimeStamp getFullYear this TimeStamp getMonth this T
  • MongoDB 过滤嵌套对象中的数组元素

    我有一个文件如下 id ObjectId 56423b2558cb340599108b35 test source member abc member xyz 我想过滤数组元素 xyz 并且我正在尝试以下查询 db coll find te
  • 即使添加索引后,mongodb group by 仍很慢

    我有一个简单的集合 id ObjectId 5033cc15f31e20b76ca842c8 class com pandu model alarm Alarm serverName CDCAWR009 Integration Servic
  • 如何停止在 mongodb 集合中插入重复文档

    让我们有一个MongoDB包含三个文档的集合 db collection find id user A title Physics Bank Bank A id user A title Chemistry Bank Bank B id u
  • 调用 Mongoose 插件内模式的静态方法

    我写了一个插件 可以执行以下操作 module exports function schema options schema statics customFunction function criteria Code 这是我的架构 var
  • MongoDB:如何在嵌套数组中更新插入对象?

    考虑以下文档 countries country France cities city Paris population 100 country England cities city
  • 自动执行异步函数

    下面的代码可以完美运行 const Course mongoose model Course courseSchema async function foo const nodeCourse new Course name Node JS
  • Express Mongoose DB.once('open')无法执行回调函数

    exports c 39 function req res var mongoose require mongoose mongoose createConnection mongodb localhost cj var db mongoo
  • 如何在 Meteor 应用程序之间共享 MongoDB 集合?

    我希望能够为我的项目提供一个管理应用程序和一个客户端应用程序 理想情况下 我希望能够拥有一个共享的 MongoDB 集合 我怎样才能做到这一点 我尝试在两个不同的应用程序中创建具有相同名称的集合 但发现 Meteor 会将数据分开 知道我能

随机推荐