【问题标题】:I can not get dates after my current date我无法获取当前日期之后的日期
【发布时间】:2018-11-09 04:26:19
【问题描述】:

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

这是我的数据示例:

但是有了这个查询:

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

我没有得到结果,我做错了什么?谢谢

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    您可以将日期转换为 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() }}}
    ])
    

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

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

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

    但是,该解决方案存在以下事实:$where不能使用索引,因此请记住这一点。

    【讨论】:

    • 感谢您的帮助,我正在使用 robomongo。我遇到了这个问题:i.imgur.com/XVxJTvI.png
    • 你的 mongoDB 版本是多少? $dateFromString 来自 3.6 及更高版本。
    • 我看到它是 3.4。但我的工作没有权限更新它,还有其他方法可以实现吗?
    • 推荐的方法是将您的数据更新为ISODate 或升级您的数据库。我发布了另一种性能不佳的解决方案,它绝不是最佳实践。
    • 未能执行所有脚本。脚本已达到 shell 超时(15 秒)限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多