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罗盘汇总$具有动态日期的匹配范围的主要内容,如果未能解决你的问题,请参考以下文章