MongoDB中有两种日期类型:ISODate和Date。
ISODate类型
ISODate类型是MongoDB中存储日期时间的标准格式,也是MongoDB官方推荐的日期类型。它的格式为ISO 8601,精确到毫秒,例如:“2019-08-21T17:37:46.123Z”。其中,T表示时间的开始,Z表示时区为UTC(协调世界时)。
在MongoDB命令行中,可以使用new Date()函数来创建一个ISODate类型的日期,例如:
db.collection.insertOne({ "date": new Date() })
ISODate类型支持各种日期操作,例如比较、范围查询等。例如,可以使用 g t e 、 gte、 gte、lte等操作符来对日期进行范围查询,例如:
> db.collection.find({ "date": { "$gte": ISODate("2019-08-21T00:00:00Z"),"$lte": ISODate("2019-08-21T23:59:59Z") } })
Date类型
Date类型是JavaScript中的日期类型,在MongoDB中也可以使用Date类型来存储日期。Date类型存储的数据精度为毫秒,例如:1566401466123。
在MongoDB命令行中,可以使用Date构造函数来创建一个Date类型的日期,例如:
db.collection.insertOne({ "date": new Date(1566401466123) })
相互转换
ISODate类型和Date类型可以相互转换,例如:
> db.collection.insertOne({ "date": new Date() })
> var doc = db.collection.findOne()
> doc.date instanceof Date // true
> doc.date.toISOString() // "2019-08-21T17:37:46.123Z"
> new ISODate(doc.date.toISOString()) // ISODate("2019-08-21T17:37:46.123Z")
ISODate类型的日期可以进行更多的日期操作,而Date类型只支持有限的日期操作。因此,MongoDB官方推荐使用ISODate类型来存储日期。