【问题标题】:How to Convert mongodb ISODate to string in mongoDB?如何将 mongodb ISODate 转换为 mongoDB 中的字符串?
【发布时间】:2014-12-19 05:46:00
【问题描述】:

我在 mongo 中有我的 ISODate 作为 ISODate,我只想用特定日期时间格式的字符串格式。

这是 ISODate:

ISODate("2020-04-24T11:41:47.280Z")

预期结果:

"2020-04-24T11:41:47.280Z"

我希望这发生在 mongodb 上,因为我的许多服务都期望采用这种格式,并且我不想对所有服务进行更改,因为这是一项乏味的工作。

【问题讨论】:

  • 您是从mongo shell 还是特定驱动程序执行此操作? ISODate() 只是标准 JavaScript Date 对象的便捷包装器,因此您可以这样做:ISODate("2020-04-24T11:41:47.280Z").toISOString()。如果您使用 JavaScript,我建议您使用 moment.js 进行更高级的格式化。
  • 您是否正在寻找一种将所有数据从 ISODate 转换为字符串的方法。或将其作为日期保存在 mongodb 中,并在后端请求时将其解析为字符串。
  • 我在 mongo 中运行更新脚本以将字符串日期转换为 ISODate,这是我正在运行的脚本 db.events.find().forEach(function(element){ if(element .t && typeof element.t === "string"){ element.t = ISODate(element.t); }}) 这里 element.t 将是“2020-04-24T11:41:47.280Z”。运行此脚本后,它将转换为 ISODate("2020-04-24T11:41:47.280Z")。现在我想将它转换回 mongo "2020-04-24T11:41:47.280Z" 中的相同格式。我不能在 mongodb 中使用时刻。
  • @Manu 请编辑您的问题以包含代码。 cmets 中的代码格式不正确。
  • 快速提问。您是否仍然能够将预期结果存储在字符串而不是日期对象中进行日期范围查询?

标签: mongodb mongodb-query


【解决方案1】:

我在尝试以下操作时得到了预期的结果。

ISODate("2020-04-24T11:41:47.280Z").toJSON()

这将把字符串还给我

"2020-04-24T11:41:47.280Z"

【讨论】:

    【解决方案2】:

    也许只是将日期转换为字符串?这与 mongo 的关系不如 js。 moment 很棒,但在 mongo shell 脚本中无法使用。

    db.events.find().forEach(function(doc) {     
       //   printjson ("Document is " + doc);    
       var isoDate = doc.t;   // t is correct key?     
       var isoString = isoDate.toISOString()    
       // update the collection with string using a new key    
       db.events.update(
            {"_id":doc._id},
            {
              $set: {"iso_str":isoString}
            }
       );
       // or overwrite using 't' key      db.events.update({"_id":doc._id},{$set:{"t":isoString}});
    })
    

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。
      【解决方案4】:

      我刚刚遇到了这个问题。 ISODate 中没有内置任何东西。所以我将 ISODate 转换为 JSON 文本,然后我做一个子字符串来获得我想要的部分。您也可以使用 ISODate 上的方法分别获取年、月、日,然后将它们组合起来。

      function formatDate(isoDate){
          return isoDate.toJSON().substr(9, 20);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        • 2017-09-04
        • 1970-01-01
        • 2017-12-08
        • 2014-08-16
        • 2022-01-02
        • 1970-01-01
        相关资源
        最近更新 更多