由于MongoDB以UTC存储日期对象,而我的Spring应用程序的默认时区为America/New_York
,因此如何在America/New_York
时区中按日期范围查询数据库?
例如,集合中的每个文档都有一个UTC格式的createdDate
,我想查询在America/New_York
时区的2020年11月20日午夜之后创建的文档,如何在我的Spring Data MongoDB应用程序中做到这一点?
如果我在午夜前盲目查找,则返回的对象将在午夜前4-5小时,即2020年11月19日(因为UTC午夜提前4/5小时,具体取决于月份(。
我的Spring应用程序将日期时间存储在JavaLocalDateTime
对象中。数据库中的日期时间如下所示:2020-10-28T03:40:49.132+00:00
您可能希望在聚合管道中使用$dateFromString
来投影标志并使用标志进行筛选:
db.getCollection(<collection name>).aggregate([
{
$addFields : {
largerThan : {
$gte : [
"$createdDate",
{
$dateFromString: {
dateString: "2020-11-20T00:00:00.000",
timezone: "America/New_York"
}
}
]
}
}
},
{
$match : {
largerThan : true
}
}
])
ref:$dateFromString MongoDB文档