mongodb罗盘汇总$具有动态日期的匹配范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb罗盘汇总$具有动态日期的匹配范围相关的知识,希望对你有一定的参考价值。

我正在尝试在mongodb罗盘中建立聚合管道。我正在使用$ match查找日期范围内的文档。我希望日期范围始终是“当前星期”。

这有效:

 $match: {
    CREATED_ON: {
      $gte: ISODate('2019-09-01'),
      $lt: ISODate('2019-09-07')
    }
  }

但是我需要它像这样:

  $match: {
    CREATED_ON: {
      $gte: *first day of current week*,
      $lt: *last day of current week*
    }
  }

我如何在罗盘agg管道中执行此操作?

答案

我认为Mongo聚合框架中没有一种动态匹配当前日期的方法。

在服务器端应用程序中,您必须动态计算开始日期和结束日期,然后将其传递到$ match中。

以下是用于获取当前星期的开始和结束日期的示例函数(假设开始=星期日,结束=星期六)。>>

const SUNDAY_DAY_NUMBER = 0;
const SATURDAY_DAY_NUMBER = 6;

/**
 * @example
 * const dateQuery = getDateQueryForCurrentWeek();
 * const matchObject = { CREATED_ON: dateQuery };
 * const findResult = db.getCollection('collection').aggregate([{ $match: matchObject }]).toArray();
 */
const getDateQueryForCurrentWeek = () => {
  const now = new Date();
  const numDaysToBeginningOfWeek = SUNDAY_DAY_NUMBER - now.getDay();
  const numDaysToEndOfWeek = SATURDAY_DAY_NUMBER - now.getDay();

  const firstDayOfCurrentWeek = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate() + numDaysToBeginningOfWeek,
    0,
    0,
    0,
    0
  );
  const lastDayOfCurrentWeek = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate() + numDaysToEndOfWeek,
    24,
    0,
    0,
    -1
  );

  const query = {
    $gte: firstDayOfCurrentWeek,
    $lte: lastDayOfCurrentWeek
  };

  return query;
};

以上是关于mongodb罗盘汇总$具有动态日期的匹配范围的主要内容,如果未能解决你的问题,请参考以下文章

在雪花中创建具有动态日期范围的日历表

Doctrine Mongodb ODM 在聚合中添加动态日期

如何修复 C# MOngoDB 中的日期匹配错误

性能聚合 MongoDB 匹配和示例

使用公式在动态变化的范围内返回匹配单元格的值?

Excel中具有偏移(跳过线)的动态范围