1. MongoDB日期格式介绍
MongoDB是一款NoSQL数据库,内置支持多种日期类型,常用的包括Date、ISODate、Timestamp等。在进行日期格式处理之前,先了解一下这些日期类型的定义:
Date:从1970年1月1日午夜开始经过的毫秒数。
ISODate:ISO 8601日期格式的字符串,比如:"2019-03-10T23:00:00Z"。
Timestamp:包含两个部分,第一个部分是从1970年1月1日午夜开始经过的秒数,第二个部分是一个自增的整数,用来处理同一秒内多个事件的先后顺序。
2. 日期格式的存储
2.1 存储Date类型
在MongoDB中,使用new Date()函数可以创建一个Date对象,将其插入到集合中即可存储Date类型的日期。
db.collectionName.insert({dateField: new Date()})
查询Date类型的数据时,可以使用ISODate函数将其转换为ISODate字符串进行查询:
db.collectionName.find({dateField: {$gte: ISODate("2019-01-01T00:00:00.000Z"), $lt: ISODate("2019-02-01T00:00:00.000Z")}})
2.2 存储ISODate类型
如果希望直接存储ISODate类型的日期,可以使用ISODate函数将其转换为ISODate字符串进行插入:
db.collectionName.insert({dateField: ISODate("2019-03-10T23:00:00Z")})
查询ISODate类型的数据时,可以直接使用ISODate函数:
db.collectionName.find({dateField: {$gte: ISODate("2019-01-01T00:00:00.000Z"), $lt: ISODate("2019-02-01T00:00:00.000Z")}})
2.3 存储Timestamp类型
存储Timestamp类型的日期需要使用new Timestamp()函数,其参数为秒数和毫秒数:
db.collectionName.insert({dateField: new Timestamp(1552248000, 0)})
查询Timestamp类型的数据时,需要使用BSON.Timestamp类进行构造查询条件:
var ts = new Timestamp(1551312000, 0);
db.collectionName.find({dateField: {$gte: ts}})
3. 日期格式的查询
3.1 查询某个时间段内的数据
使用$gte和$lt运算符可以查询某个时间段内的数据,注意要使用ISODate函数构造查询条件:
db.collectionName.find({dateField: {$gte: ISODate("2019-01-01T00:00:00.000Z"), $lt: ISODate("2019-02-01T00:00:00.000Z")}})
3.2 查询某一天的数据
可以使用$regex运算符结合正则表达式查询某一天的数据,注意要将ISODate转换成字符串形式:
var dateStr = ISODate("2019-03-10T00:00:00Z").toISOString().substr(0, 10);
db.collectionName.find({dateField: {$regex: dateStr}})
3.3 查询本周或本月的数据
可以使用MongoDB的date aggregation functions进行日期聚合,比如查询本周或本月的数据:
// 查询本周的数据
db.collectionName.aggregate(
[
{
$match: {
dateField: {
$gte: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
}
}
},
{
$group: {
_id: {
year: { $year: "$dateField" },
week: { $week: "$dateField" }
},
count: { $sum: 1 }
}
}
]
)
// 查询本月的数据
db.collectionName.aggregate(
[
{
$match: {
dateField: {
$gte: new Date(new Date().getFullYear(), new Date().getMonth(), 1)
}
}
},
{
$group: {
_id: {
year: { $year: "$dateField" },
month: { $month: "$dateField" }
},
count: { $sum: 1 }
}
}
]
)
4. 总结
对于MongoDB日期格式的处理,需要根据实际需求选择合适的日期类型,并使用相应的函数进行存储和查询。在进行日期查询时,要注意转换时区、使用正则表达式、使用日期聚合等技巧。