【问题标题】:Inserting Date() in to Mongodb through mongo shell [closed]通过 mongo shell 将 Date() 插入到 Mongodb [关闭]
【发布时间】:2015-02-13 07:38:11
【问题描述】:

我正在通过以下查询插入文档:

db.collection.insert(  
{  
      date: Date('Dec 12, 2014 14:12:00')  
})  

但它会给我一个错误。

如何在我的集合中插入日期而不出错?

【问题讨论】:

  • 什么错误? Edit your question 并添加错误消息。
  • 这个问题在shell中明确说明,所有给出的答案都是针对javascript的。请发布从 mongo 控制台插入的答案。

标签: javascript mongodb mongodb-query


【解决方案1】:

您一定会遇到不同的错误,因为上面的代码将导致 Date() 方法将当前日期作为字符串返回,而不管对象提供的参数如何。来自documentationJavaScript Date 对象只能通过调用 JavaScript Date 作为构造函数来实例化:将其作为常规函数调用(即没有new 运算符)将返回一个字符串而不是@987654326 @ 目的;与其他 JavaScript 对象类型不同,JavaScript Date 对象没有文字语法。

您可能想尝试这个来获取正确的日期,记住 JavaScript 的 Date 构造函数的月份参数是从 0 开始的:

var myDate = new Date(2014, 11, 12, 14, 12);
db.collection.insert({ "date": myDate });

【讨论】:

  • 很好的参考。但对于 Date 构造函数的工作方式和对 MongoDB 的要求,还不是很“真实”。
  • 感谢您的更正,我最初从MongoDB shell documentation 想到 Date() 方法将当前日期作为字符串返回,如上所述,以及 Date 对象如何产生约 290 的可表示日期范围数百万年过去和未来,但从未完全理解 Date 构造函数的参数在 MongoDB 中有何不同。为启蒙干杯。
  • JavaScript DateISODate() 的作用相同,对于 shell 的期望。 ISODate() 在表示上更加严格,only 接受会导致 UTC 构造的字符串。这就是区别。
【解决方案2】:

JavaScript 日期对象可能是一件有趣的事情。根据您实际提供参数以实例化它们的方式,您会得到不同的结果。

例如,有些人可能会建议你试试这个:

var myDate = new Date(2014, 11, 12, 14, 12)

这看起来不错,但是有问题。

您会看到,在 JavaScript 中实例化 Date 对象的某些形式在创建日期时使用“本地”时区。其他人使用 UTC 或“通用”时区来设定标准。这也是 MongoDB 所期望的“标准”,并且被普遍接受为您的应用程序以这种方式存储日期的最佳实践。在您的代码中进行任何转换,远离数据存储。这确保您可以毫无问题地处理多个语言环境。

所以你应该做的是:

var date = new Date("2014-12-11T14:12:00Z")

在 MongoDB shell 中还有一个“帮助程序”,它以几乎相同的方式处理此问题,但更具体的语法:

var date = new ISODate("2014-12-11T14:12:00Z")

这会生成一个按预期正确存储的 UTC 日期值。在 MongoDB 中存储日期时,您应该始终使用 UTC。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2018-12-26
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多