1. 时间在Mongodb中的存储方式
在Mongodb中,时间被存储为一个64位的整型数值,表示自1970年1月1日00:00:00 UTC时间以来经过的毫秒数。这个值通常被称为Unix时间戳。在Mongodb中,我们可以使用ISODate()来表示时间数据类型,如下:
db.collection.insertOne({ "date": ISODate("2021-06-10T10:30:00Z") })
注意:这里的时间是UTC时间,是按照格林威治时间标准的,我们需要根据实际情况进行转换。
2. 时间操作符
Mongodb支持多种时间操作符,用于根据时间对数据进行查询和操作。下面是一些常用的日期操作符:
2.1 $currentDate
$currentDate用来将字段设置为当前时间,可以使用两个修饰符:
{"$type": "date"}:表示将该字段设置为当前时间的日期时间对象
{"$type": "timestamp"}:表示将该字段设置为当前时间的时间戳(以毫秒为单位)
下面是使用$currentDate设置一个名为"created_at"的字段为当前日期时间对象的例子:
db.collection.update({ "_id": ObjectId("123") }, { "$currentDate": { "created_at": {"$type": "date"} } })
2.2 $dateToString
$dateToString用来将日期类型的字段转换为指定格式的字符串,它接受三个参数:
format:转换后的格式,支持预定格式或自定义格式
date:要转换的日期字段
timezone:可选字段,表示时区,如果不指定时区,则默认使用UTC时间
下面是使用$dateToString将日期类型字段"created_at"转换为字符串的例子:
db.collection.aggregate([
{ "$project": {
"created_at": { "$dateToString": {
"format": "%Y-%m-%d %H:%M:%S",
"date": "$created_at",
"timezone": "+08:00"
} }
} }
])
2.3 $dateFromString
$dateFromString用来将字符串类型的日期转换为日期对象,可以使用与$dateToString相同的参数
下面是使用$dateFromString将字符串"2021-06-10T10:30:00Z"转换为日期对象的例子:
db.collection.aggregate([
{ "$project": {
"created_at": { "$dateFromString": {
"dateString": "2021-06-10T10:30:00Z",
"timezone": "+08:00"
} }
} }
])
3. 时间比较
在Mongodb中,我们可以使用$lt(less than)、$lte(less than or equal)、$gt(greater than)、$gte(greater than or equal)等操作符来比较时间大小
下面是使用$gt比较时间大小的例子:
db.collection.find({ "created_at": { "$gt": ISODate("2021-06-10T10:30:00Z") } })
4. 时间加减
在Mongodb中,我们可以使用$add和$subtract操作符来对时间进行加减操作,它们接受两个参数:
date:要加减的日期字段
value:要加减的时间,可以是一个数字或一个时间间隔对象
下面是使用$add将日期字段"created_at"加1小时的例子:
db.collection.aggregate([
{ "$project": {
"created_at_plus_1_hour": { "$add": [ "$created_at", 60 * 60 * 1000 ] }
} }
])
注意:这里的时间间隔值是以毫秒为单位的,因此1小时等于60分钟乘以60秒再乘以1000毫秒。
5. 总结
本文介绍了Mongodb中的时间函数使用技巧,包括时间在Mongodb中的存储方式、时间操作符、时间比较和时间加减等方面。这些技巧可以帮助我们更好地使用时间字段进行查询和操作,提高我们的工作效率。