首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在mongodb聚合中获取两个日期之间的工作天数

在MongoDB聚合中获取两个日期之间的工作天数,可以通过以下步骤实现:

  1. 首先,使用$match操作符过滤出符合条件的文档。在这个问题中,我们需要筛选出日期字段在指定范围内的文档。假设我们有一个名为"date"的日期字段,可以使用以下代码进行筛选:
代码语言:txt
复制
{
  $match: {
    date: {
      $gte: ISODate("2022-01-01"), // 开始日期
      $lte: ISODate("2022-01-31")  // 结束日期
    }
  }
}
  1. 接下来,使用$group操作符对筛选出的文档进行分组。由于我们需要计算工作天数,可以按照年份和月份进行分组。可以使用以下代码进行分组:
代码语言:txt
复制
{
  $group: {
    _id: {
      year: { $year: "$date" },   // 按年份分组
      month: { $month: "$date" }  // 按月份分组
    },
    count: { $sum: 1 }  // 统计每个分组的文档数量
  }
}
  1. 然后,使用$project操作符对结果进行投影,计算出工作天数。在这个问题中,我们需要排除周末(星期六和星期日)的天数。可以使用以下代码进行投影:
代码语言:txt
复制
{
  $project: {
    _id: 0,
    year: "$_id.year",
    month: "$_id.month",
    workdays: {
      $subtract: [
        "$count",
        {
          $multiply: [
            2,
            {
              $floor: {
                $divide: [
                  { $add: [{ $dayOfWeek: "$date" }, 5] },
                  7
                ]
              }
            }
          ]
        }
      ]
    }
  }
}
  1. 最后,使用$sort操作符对结果进行排序,按照年份和月份进行升序排列。可以使用以下代码进行排序:
代码语言:txt
复制
{
  $sort: {
    year: 1,
    month: 1
  }
}

综上所述,完整的MongoDB聚合查询可以如下所示:

代码语言:txt
复制
db.collection.aggregate([
  {
    $match: {
      date: {
        $gte: ISODate("2022-01-01"), // 开始日期
        $lte: ISODate("2022-01-31")  // 结束日期
      }
    }
  },
  {
    $group: {
      _id: {
        year: { $year: "$date" },   // 按年份分组
        month: { $month: "$date" }  // 按月份分组
      },
      count: { $sum: 1 }  // 统计每个分组的文档数量
    }
  },
  {
    $project: {
      _id: 0,
      year: "$_id.year",
      month: "$_id.month",
      workdays: {
        $subtract: [
          "$count",
          {
            $multiply: [
              2,
              {
                $floor: {
                  $divide: [
                    { $add: [{ $dayOfWeek: "$date" }, 5] },
                    7
                  ]
                }
              }
            ]
          }
        ]
      }
    }
  },
  {
    $sort: {
      year: 1,
      month: 1
    }
  }
])

对于腾讯云的相关产品和产品介绍链接地址,由于要求不能提及具体品牌商,建议您在腾讯云官方网站上查找相关产品,例如腾讯云数据库MongoDB、腾讯云云函数(用于聚合查询的计算)、腾讯云云监控(用于监控数据库性能)等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券