Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何检索本周猫鼬的数据?_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

Mongodb 如何检索本周猫鼬的数据?

Mongodb 如何检索本周猫鼬的数据?,mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,我有一个模型,用于我的商业房地产的所有请求 我想基于createdAt字段创建一个聚合中间件,该字段只返回周一午夜到现在之间创建的模型 我已经看了所有以前的问题,但找不到任何东西,而且mongo中的聚合文档太大了,我都想不起来了 你有什么建议吗 我已尝试此操作,但它返回一个空数组: getGestionaleStats = async (req, res) => { try { const richieste = await Richiesta.aggregate([

我有一个模型,用于我的商业房地产的所有请求

我想基于createdAt字段创建一个聚合中间件,该字段只返回周一午夜到现在之间创建的模型

我已经看了所有以前的问题,但找不到任何东西,而且mongo中的聚合文档太大了,我都想不起来了

你有什么建议吗

我已尝试此操作,但它返回一个空数组:

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") }