Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过createdAt和staffId将mongoose日期(不含时间和组)与每周、每月和每年的员工总数(通过聚合)进行比较?_Node.js_Mongodb_Mongoose_Aggregation Framework_Restapi - Fatal编程技术网

Node.js 通过createdAt和staffId将mongoose日期(不含时间和组)与每周、每月和每年的员工总数(通过聚合)进行比较?

Node.js 通过createdAt和staffId将mongoose日期(不含时间和组)与每周、每月和每年的员工总数(通过聚合)进行比较?,node.js,mongodb,mongoose,aggregation-framework,restapi,Node.js,Mongodb,Mongoose,Aggregation Framework,Restapi,可能是问题看起来像是重复的,但为此道歉 我想将createdAt属性的周、月、年结果汇总到一起,不需要时间和staffId 模型如下所示: { "_id" : ObjectId("5f351f3d9d90b1281c44c5dp"), "staffId" : 12345, "category" : "trend", "page_route"

可能是问题看起来像是重复的,但为此道歉

我想将
createdAt
属性的周、月、年结果汇总到一起,不需要时间和
staffId

模型如下所示:

   {
    "_id" : ObjectId("5f351f3d9d90b1281c44c5dp"),
    "staffId" : 12345,
    "category" : "trend",
    "page_route" : "http://example.com/rer",
    "expireAt" : ISODate("2020-08-13T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5de"),
    "staffId" : 12346,
    "category" : "incident",
    "page_route" : "http://example.com/rergfhfhf",
    "expireAt" : ISODate("2020-08-14T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-08T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-12T11:08:45.199Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5dc"),
    "staffId" : 12347,
    "category" : "trend",
    "page_route" : "http://example.com/rerrwe",
    "expireAt" : ISODate("2020-08-13T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-13T11:08:45.199Z"),
    "__v" : 0
}
{
    "_id" : ObjectId("5f351f3d9d90b1281c44c5dr"),
    "staffId" : 12348,
    "category" : "trend",
    "page_route" : "http://example.com/rerrwe",
    "expireAt" : ISODate("2020-08-12T11:08:45.196Z"),
    "createdAt" : ISODate("2020-08-08T11:08:45.199Z"),
    "updatedAt" : ISODate("2020-08-12T11:08:45.199Z"),
    "__v" : 0
}
预期结果: 示例1)每周

[
{_id: "2020-11-13", total: 2},
{_id: "2020-11-8", total: 2},


]
[
{_id: "2020-11-8", total: 4},

]
示例2)每月一次

[
{_id: "2020-11-13", total: 2},
{_id: "2020-11-8", total: 2},


]
[
{_id: "2020-11-8", total: 4},

]
同样的,每年

我正在使用nodejsmongoose来实现API

我很挣扎,但我无法达到预期的结果

如果有人帮助我,那将是巨大的帮助

感谢所有专家

我试过这样的方法:

[
        {
          $match: {
            createdAt: { $gte: new Date(currentDate), $lt: new Date(nextDate) }
          }
        },
        {
          $project: {
            _id: 1,
            staffId: 1,
            day: {
              $dayOfMonth: "$createdAt"
            },
            month: {
              $month: "$createdAt"
            },
            year: {
              $year: "$createdAt"
            }
          }
        },
        {
          $project: {
            _id: 1,
            staffId: 1,
            datetime: {
              $concat: [
                {
                  $substr: ["$year", 0, 4]
                },
                "-",
                {
                  $substr: ["$month", 0, 2]
                },
                "-",
                {
                  $substr: ["$day", 0, 2]
                }
              ]
            }
          }
        },
        {
          $group: {
            _id: {
              createdAt: "$datetime",
              staffId: "$staffId"
            }
          }
        },
        {
          $group: {
            _id: {$week:"$_id.createdAt"},
            total: {
              $sum: 1
            }
          }
        },
        { $sort: { _id: 1 } }
      ];
你可以试试

  • 每周分组

  • 按月分组

  • 逐年分组

您可以使用
createdAt
字段从客户端语言更改日期格式

你可以试试

  • 每周分组

  • 按月分组

  • 逐年分组

您可以使用
createdAt
字段从客户端语言更改日期格式


到目前为止你尝试了什么?@WernfriedDomscheit,我已经更新了相关信息。你能告诉我到目前为止你尝试了什么吗?@WernfriedDomscheit,我已经更新了相关信息。请注意,有一个小问题,如果同一个staffid在同一日期多次出现,那么它应该返回1个计数,因为同一时间我们希望使用createdAt和staffid进行分组。我们如何才能实现您可以像这样按staffId分组,如果这不是您的期望,请提供预期结果。有一个小问题,如果同一个staffId在同一日期多次出现,那么它应该返回1个计数,因为我们希望在同一时间使用createdAt和staffId进行分组。我们如何才能做到这一点,你可以像这样分组,如果这不是你的期望,请你提供预期的结果。
db.collection.aggregate([
  {
    $group: {
      _id: { $year: "$createdAt" },
      createdAt: { $first: "$createdAt" },
      count: { $sum: 1 }
    }
  }
])