mongodb聚合以获取2个日期之间的数据

标签 mongodb express

let params = JSON.parse(req.query.params);
let dateFrom = params.dateFrom;
let dateTo = params.dateTo;
dateFrom = dateFrom.replace(/T/g, ' '); //parse the data to the format accepted by mongodb
dateFrom = dateFrom.replace(/Z/g, ' ');
dateTo = dateTo.replace(/T/g, ' ');
dateTo = dateTo.replace(/Z/g, ' ');



productSchema.aggregate([
    {
        $match: { 
            productExist: true,
        }
    },
    {
        $match: { 
            productTimeStamp: {
                $gte: dateTo,
                $lte: dateFrom
            } 
        }
    },        
    { 
        $lookup:
            {
                from: 'supplierschemas',
                localField: 'supplierId',
                foreignField: '_id',
                as: 'supplier'
            }
    },
    { 
        $lookup:
            {
                from: 'brandschemas',
                localField: 'brandId',
                foreignField: '_id',
                as: 'brand'
            }
    },
    { 
        $lookup:
            {
                from: 'categoryschemas',
                localField: 'categoryId',
                foreignField: '_id',
                as: 'category'
            }
    })]

我有上面的查询,它使用 express 从 mongodb 获取数据。我想选择中间的 2 个日期。但是当我添加这些代码行时,上面的代码不起作用:

    {
        $match: { 
            productTimeStamp: {
                $gte: dateTo,
                $lte: dateFrom
            } 
        }
    }, 

我如何准确地添加这些语句来获取 2 个日期的数据?

最佳答案

MongoDB 默认日期是 ISODate。不要对日期进行 replace 操作。

而是将它们作为新日期传递:

let params = JSON.parse(req.query.params);

productSchema.aggregate([{
    $match: {
      productExist: true,
    }
  },
  {
    $match: {
      productTimeStamp: {
        $gte: new Date(params.dateFrom),
        $lte: new Date(params.dateTo)
      }
    }
  },
  {
    $lookup: {
      from: 'supplierschemas',
      localField: 'supplierId',
      foreignField: '_id',
      as: 'supplier'
    }
  },
  {
    $lookup: {
      from: 'brandschemas',
      localField: 'brandId',
      foreignField: '_id',
      as: 'brand'
    }
  },
  {
    $lookup: {
      from: 'categoryschemas',
      localField: 'categoryId',
      foreignField: '_id',
      as: 'category'
    }
  })]

关于mongodb聚合以获取2个日期之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52911721/

相关文章:

node.js - 如何将排序函数与 $or 和 $and 一起使用?

ruby-on-rails - 继承的资源和 Mongoid

node.js - NodeJS、Express 和多事的 Socket.io

javascript - react-router 如何使用 redirectLocation 或 301 或 302 状态

javascript - 使用 Passportjs 刷新页面后保持身份验证

javascript - 在express中正确使用app.set()?

javascript - 使用 Express/MongoDB 构建收件箱系统

javascript - NodeJS + Express + Mongoose(MongoDB) 数据库插入报错

node.js - NodeJS 加密 : re-use cipher object to improve performance

python - pymongo update_one 不更新基于 _id