首页 > 解决方案 > 我无法获取当前日期之后的日期

问题描述

我想获取“FECHA_FIN”字段大于等于今天日期的记录。

这是我的数据示例:

在此处输入图像描述

但有了这个查询:

db.getCollection('susp_programadas').find( {"FECHA_FIN":{ $gte: new Date("YYYY-mm-dd") }}  )

在此处输入图像描述 我没有得到结果,我做错了什么?谢谢

标签: mongodb

解决方案


您可以将日期转换为 ISO 日期并以这种方式进行查询。由于您将日期存储为字符串,mongo 不知道如何在不转换的情况下根据 ISO 日期查询它。

如果您将日期存储在 mongo 作为默认 ISO 日期,那么您可以轻松完成此操作:

db.getCollection('susp_programadas').find({"FECHA_FIN":{$gte: new Date()}})

所以你现在可以这样做:

db.getCollection('susp_programadas').aggregate([
{
  $project: {
    date: { $dateFromString: { dateString: '$FECHA_FIN' }}
  }
  },
  { $match: { date: { $gte: new Date() }}}
])

您可以在带有 a 的聚合查询中使用$dateFromString$match来获得所需的结果。请注意,$dateFromString 仅在MongoDB 版本 3.6 及更高版本中可用。

如果无法将您的数据转换为 ISODate 或升级您的数据库,您还可以考虑另一种解决方案,通过$where

db.getCollection('susp_programadas').find({
    $where: function(){
        return new Date(this.FECHA_FIN) > Date.now()
    }
})

但是,该解决方案存在$where 无法使用索引的问题,因此请记住这一点。


推荐阅读