【问题标题】:Count of records by Date with custom date range in mongoDB?mongoDB中具有自定义日期范围的日期记录数?
【发布时间】:2018-12-03 16:36:45
【问题描述】:

我想在按降序传递自定义日期范围时按日期获取所有数据计数。这是我的代码

  var start = new Date(req.body.from_date);  // 2018-12-03
  start.setHours(0,0,0,0);

  var end = new Date(req.body.to_date);  // 2018-12-03
  end.setHours(23,59,59,999);

db.companies.aggregate([{
  $match: {
   $and : [
    {startDate: {$gte:start} }, 
    {endDate: {$lte:end} }
   ]
  },
 },
 {
  $group:{
    _id:{ startDate:"$startDate",endDate:"$endDate",
       day: { $dayOfMonth: "$entry_date" },
       month: { $month: "$entry_date" }, 
       year: { $year: "$entry_date" }
     }, 
     count: { $sum:1 },
     date: { $first: "$entry_date" }
   }
 },
 {
    $sort:{ entry_date: -1 }
 }
 {
  $project:{
   date:{
    $dateToString: { format: "%Y-%m-%d", date: "$date" }
   },
   count: 1,
   _id: 0
  }
 }])

如果我没有通过 $match 条件,那么它将显示带有日期的数据计数,但是当我尝试通过并条件它不起作用时。有什么想法吗?

提前致谢

【问题讨论】:

  • 我修好了.. 感谢支持

标签: node.js mongodb mongodb-query aggregate


【解决方案1】:

日期包含在内置于 MongoDb 的 ISODate() 辅助函数中,是一种将日期表示为直观字符串的便捷方式,同时仍允许充分使用日期查询和索引。

试试这个:

$and : [
    {startDate: {$gte: ISODate("2018-11-10T18:30:00.000Z")} }, 
    {endDate: {$lte: ISODate("2018-11-30T18:29:59.999Z")} }
   ]

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
  • @Baozi,感谢您的友好回复,我尝试了同样的方法,但得到“ReferenceError: ISODate is not defined”所以​​我更改了代码,再次查看有问题的代码......还有其他解决方案吗?
  • @RiteshDoomra 你能提供一个你正在执行此代码的示例文档吗?
【解决方案2】:

我修好了,$project 需要我们在 $match 条件下需要的所有字段,就像我想要日期范围的结果一样,我的字段是 entry_date

这是我的代码...

  var company_id= company._id 
  var start = new Date(req.body.from_date);
  start.setHours(0,0,0,0);
  var end = new Date(req.body.to_date);
  end.setHours(23,59,59,999);

VisitorCompany.aggregate(
      [   
        {
          $match: {
            $and:[
              { entry_date: { $gt: start, $lt: end } },{company_id:""+company_id+""}
            ]
          }
        },
        { $sort : { entry_date : -1 } },
          {
              $group:
              {
                  _id:
                  {
                      day: { $dayOfMonth: "$entry_date" },
                      month: { $month: "$entry_date" }, 
                      year: { $year: "$entry_date" }
                  }, 
                  count: { $sum:1 },
                  entry_date: { $first: "$entry_date" }
              }
          },
          {
              $project:
              {
                  entry_date:
                  {
                      $dateToString: { format: "%Y-%m-%d", date: "$entry_date" }
                  },
                  count: 1,
                  _id: 0
              }
          }
      ])

输出在这里....

    {
        "count": 1,
        "entry_date": "2018-11-18"
    },
    {
        "count": 2,
        "entry_date": "2018-11-22"
    },
    {
        "count": 2,
        "entry_date": "2018-11-23"
    },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2015-11-11
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多