Node.js 如何在NodeJS的查询参数中传递时间戳(Express+;Mongoose)

Node.js 如何在NodeJS的查询参数中传递时间戳(Express+;Mongoose),node.js,mongodb,mongoose,aggregation-framework,aggregate,Node.js,Mongodb,Mongoose,Aggregation Framework,Aggregate,我有这样的MongoDB命令: db.transaction.aggregate([ { "$match": { $and:[{ 'is_deleted': false, 'createdAt':{'$gte': ISODate('2020-09-01T00:00:00.000Z'),'$lte':ISODate('2020-12-15T00:0

我有这样的MongoDB命令:

db.transaction.aggregate([
   {
      "$match": 
         {
          $and:[{
                  'is_deleted': false,
                   'createdAt':{'$gte': ISODate('2020-09-01T00:00:00.000Z'),'$lte':ISODate('2020-12-15T00:00:00.000Z')}, 
                   'type': 'deposit'
                }
               ]
         }
         
   },
   {
       $group: {
          _id: null ,
          depositRevenue: {$sum: "$amount"}
        }
   }
]).pretty();
{
    "_id" : null,
    "depositRevenue" : 324
}
    var startDate = new Date(req.query.startDate).toISOString();
      var endDate = new Date(req.query.endDate).toISOString();
      var objFind = {};
      objFind["is_deleted"] = false;
      
      if(startDate != undefined || endDate != undefined){
        objFind["createdAt"] = {};
        if(startDate != undefined){
              objFind["createdAt"]["$gte"] = startDate;
        }
        if(endDate != undefined){
              objFind["createdAt"]["$lte"] = endDate;
        }
      }
       objFind['type'] = 'deposit';
输出如下:

db.transaction.aggregate([
   {
      "$match": 
         {
          $and:[{
                  'is_deleted': false,
                   'createdAt':{'$gte': ISODate('2020-09-01T00:00:00.000Z'),'$lte':ISODate('2020-12-15T00:00:00.000Z')}, 
                   'type': 'deposit'
                }
               ]
         }
         
   },
   {
       $group: {
          _id: null ,
          depositRevenue: {$sum: "$amount"}
        }
   }
]).pretty();
{
    "_id" : null,
    "depositRevenue" : 324
}
    var startDate = new Date(req.query.startDate).toISOString();
      var endDate = new Date(req.query.endDate).toISOString();
      var objFind = {};
      objFind["is_deleted"] = false;
      
      if(startDate != undefined || endDate != undefined){
        objFind["createdAt"] = {};
        if(startDate != undefined){
              objFind["createdAt"]["$gte"] = startDate;
        }
        if(endDate != undefined){
              objFind["createdAt"]["$lte"] = endDate;
        }
      }
       objFind['type'] = 'deposit';
查询很好,但是当我传入NodeJS时,它就不起作用了。 下面是我在ExpressJS和Mongoose中的代码

      let revenueData = await Transaction.aggregate([
       
        {
          $match: {
           $and: [{objFind}]
          }
        },
        {
          $group: {
            _id: null,
            totalRevenue: {$sum: "$amount"}
          }
        }
      ]);
像这样使用
objFind

db.transaction.aggregate([
   {
      "$match": 
         {
          $and:[{
                  'is_deleted': false,
                   'createdAt':{'$gte': ISODate('2020-09-01T00:00:00.000Z'),'$lte':ISODate('2020-12-15T00:00:00.000Z')}, 
                   'type': 'deposit'
                }
               ]
         }
         
   },
   {
       $group: {
          _id: null ,
          depositRevenue: {$sum: "$amount"}
        }
   }
]).pretty();
{
    "_id" : null,
    "depositRevenue" : 324
}
    var startDate = new Date(req.query.startDate).toISOString();
      var endDate = new Date(req.query.endDate).toISOString();
      var objFind = {};
      objFind["is_deleted"] = false;
      
      if(startDate != undefined || endDate != undefined){
        objFind["createdAt"] = {};
        if(startDate != undefined){
              objFind["createdAt"]["$gte"] = startDate;
        }
        if(endDate != undefined){
              objFind["createdAt"]["$lte"] = endDate;
        }
      }
       objFind['type'] = 'deposit';

请看一看。谢谢你

你需要简化你的代码

  • 创建具有所需条件的对象
  • 检查开始日期和结束日期是否可用
  • 默认情况下,根字段condition为and condition,因此无需使用
    $和