我通过以下查询插入文档:
db.collection.insert(
{
date: Date('Dec 12, 2014 14:12:00')
})
但它会给我一个错误。
如何在不收到错误的情况下在我的收藏中插入日期?
答案 0 :(得分:12)
您必须获得不同的错误,因为上面的代码将导致Date()
方法将当前日期作为字符串返回,而不管对象提供的参数如何。从documentation: JavaScript日期对象只能通过调用JavaScript Date
作为构造函数来实例化:将其作为常规函数(即没有new
运算符)调用将返回字符串而不是Date
对象;与其他JavaScript对象类型不同,JavaScript Date对象没有文字语法。
您可能希望尝试使用此方法来获取正确的日期,请记住JavaScript的Date构造函数的month参数是从0开始的:
var myDate = new Date(2014, 11, 12, 14, 12);
db.collection.insert({ "date": myDate });
答案 1 :(得分:11)
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。