通过mongo shell将Date()插入Mongodb

时间:2014-12-15 08:40:11

标签: javascript mongodb mongodb-query

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

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

但它会给我一个错误。

如何在不收到错误的情况下在我的收藏中插入日期?

2 个答案:

答案 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。