【问题标题】:How to convert date format in mongodb如何在mongodb中转换日期格式
【发布时间】:2013-06-16 06:05:53
【问题描述】:

我正在使用 API(因此我无法控制字段) - 其中一个字段的类型为 Date

现在,我发现记录中存储的日期类似于以下值:

{
    ...
    "foobarDate": "2013-05-26T05:00:00.000Z",
    ...
}

现在我想根据这个日期检索一些记录-例如,我需要检索fooBarDate早于今天的所有记录。

如果我使用 Javascript 的 Date() 功能,那么我会得到以下格式的日期:
Wed Jun 19 2013 21:13:50 GMT+0530 (IST)

如果我尝试如下设计我的查询...

{
    "fooBarDate": {
        "$lte": <the date calculated in javascript>
    }
}

...我没有得到记录 - 我得到一个空数组 - 我怀疑这是因为存储在 MongoDB 中的日期格式与我传递的格式不同。

如何将 Javascript 日期格式转换为 mongodb 格式?或者至少,我如何以存储在 MongoDB 中的格式获取当前日期?

附:我正在使用 nodeJs 并希望在这种情况下查询数据库。

【问题讨论】:

    标签: mongodb date


    【解决方案1】:

    Mongo 将日期存储为 ISODate 对象。只需将我们的日期包装到 ISODate 构造函数中:

    {
        "fooBarDate": {
            "$lte": ISODate("2013-05-26T05:00:00.000Z")
        }
    }
    

    【讨论】:

    • 这有点误导,因为 ISODate 只是将字符串转换为本机 Date 类型,但 MongoDB 将日期存储为 64 位整数 BSON 日期。
    • 如果我想将 fooBarDate 与 Y-m-d 格式进行比较怎么办
    【解决方案2】:

    如果您将字符串传递给查询,则正确的数据格式是 ISO8601,这看起来就像您已经完成的那样,但是您也可以将 javascript 日期对象直接传递给查询并获得相同的结果。看起来您可能缺少正确的括号,这可能导致您的查询失败。尝试以这种方式重新格式化您的代码(编辑我使用的是猫鼬,但我认为直接 mongo 是一样的):

    var currentTime = new Date;
    orm.Records.find({lastUpdate:{$lte:currentTime}})
    

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2012-02-13
      • 2012-01-19
      • 2012-06-26
      • 1970-01-01
      相关资源
      最近更新 更多