【问题标题】:How to convert mongoDB result grouped by $week to date format?如何将按 $week 分组的 mongoDB 结果转换为日期格式?
【发布时间】:2020-11-06 01:39:40
【问题描述】:

我想创建一个报告,在其中显示每周总小时数。我正在使用 mongoDB 并按 $week 分组。我需要逐年区分周数,我的报告需要有一周的第一天和一周的最后一天的日期,而不是周数。这是我的管道。

let pipeline = [
{
  $match: {
    companyId,
  },
},
{
  $group: {
    _id: {
      $week: '$date',
    },
  },
},
{
  $project: {
    companyId: '$companyId',
  },
},];

这是我的收藏:

const hoursSchema = mongoose.Schema({
  personId: mongoose.Schema.Types.ObjectId,
  jobId: Number,
  companyId: Number,
  name: String,
  date: Date,
  hours: Number,
});

【问题讨论】:

  • 您可以使用$sum$group 来获得每周hours 的总和。
  • 我编辑了我的问题,我正在寻找一种将周数转换为日期格式的方法,(一周的第一天和一周的最后一天)。

标签: javascript node.js mongodb mongoose mongodb-query


【解决方案1】:

我最终做的是添加年份并单独使用一个函数从周数和年份数中提取日期。管道如下所示:

let pipeline = [
    {
      $match: {
        companyId,
      },
    },
    {
      $group: {
        _id: {
          week: { $week: { date: '$date' } },
          year: { $year: { date: '$date' } },
          name: '$name',
          jobTitle: '$jobTitle',
          jobId: '$jobId',
          companyId: '$companyId',
          personId: '$personId',
        },
        count: { $sum: 1 },
        hours: { $sum: '$hours' },
      },
    },
  ];

我将用户详细信息放在 $group _id 中以提取每个用户的信息。所以每个按我的对象分组的现在都有年和周,我可以使用this 来计算一周的第一天和最后一天的日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2014-02-25
    • 2018-02-22
    • 2020-09-18
    • 1970-01-01
    相关资源
    最近更新 更多