Mongodb 如何检索本周猫鼬的数据?
我有一个模型,用于我的商业房地产的所有请求 我想基于createdAt字段创建一个聚合中间件,该字段只返回周一午夜到现在之间创建的模型 我已经看了所有以前的问题,但找不到任何东西,而且mongo中的聚合文档太大了,我都想不起来了 你有什么建议吗 我已尝试此操作,但它返回一个空数组:Mongodb 如何检索本周猫鼬的数据?,mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,我有一个模型,用于我的商业房地产的所有请求 我想基于createdAt字段创建一个聚合中间件,该字段只返回周一午夜到现在之间创建的模型 我已经看了所有以前的问题,但找不到任何东西,而且mongo中的聚合文档太大了,我都想不起来了 你有什么建议吗 我已尝试此操作,但它返回一个空数组: getGestionaleStats = async (req, res) => { try { const richieste = await Richiesta.aggregate([
getGestionaleStats = async (req, res) => {
try {
const richieste = await Richiesta.aggregate([
{
$match: {
createdAt: { $lt: new Date() }
}
},
{
$group: {
_id: { $week: '$createdAt' }
}
}
]);
res.status(200).json({
status: 'success',
data: { richieste }
});
} catch (err) {
console.error(err.message);
res.status(500).json({
status: 'error',
data: err.message
});
}
当然,{$lt:newdate}可能就是问题所在
有什么建议吗?我用momentJS来做这个:
const result = Collection.aggregate([
{
$match: {
createdAt: {
$gte: moment().startOf('isoweek').toDate(),
$lt: moment().endOf('isoweek').toDate()
},
}
}
]);
我找到了vanillaJS的答案:
const richieste = await Richiesta.aggregate([
{
$match: {
createdAt: { $gte: getBeginningOfTheWeek(new Date()), $lt: new Date() }
}
},
{
$group: {
_id: null,
count: { $sum: 1 }
}
},
]}
其中GetBeginingoftheWeek是这样的:
exports.getBeginningOfTheWeek = (now) => {
const days = (now.getDay() + 7 - 1) % 7;
now.setDate(now.getDate() - days);
now.setHours(0, 0, 0, 0);
return now;
};
后一个函数来自T.J.Crowder:此解决方案使用聚合查询和自定义JavaScript函数。函数接受一个日期对象并返回今天之前的第一个星期一的日期。用于获取计算日期之后createdAt日期的所有文档 对于这样的一组输入文档:
{ _id : 1, createdAt : ISODate("2019-12-03T00:00:00Z") }
{ _id : 2, createdAt : ISODate("2019-11-12T02:00:00Z") }
{ _id : 3, createdAt : ISODate("2019-11-25T05:00:00Z") }
{ _id : 4, createdAt : ISODate("2019-11-26T00:00:00Z") }
{ _id : 9, createdAt : ISODate("2019-12-02T23:45:00Z") }
并且,LAST_MONDAY=getLastMondayISODate2019-12-04T05:40:20Z,聚合查询返回id为1的文档
{ _id : 1, createdAt : ISODate("2019-12-03T00:00:00Z") }
{ _id : 2, createdAt : ISODate("2019-11-12T02:00:00Z") }
{ _id : 3, createdAt : ISODate("2019-11-25T05:00:00Z") }
{ _id : 4, createdAt : ISODate("2019-11-26T00:00:00Z") }
{ _id : 9, createdAt : ISODate("2019-12-02T23:45:00Z") }