spring - 如何使用与 UTC 不同的时区在 MongoDB 中按日期范围查找对象?
问题描述
由于 MongoDB 在 UTC 中存储日期对象,并且我的 Spring 应用程序的默认时区为America/New_York
,如何按时区中的日期范围查询数据库America/New_York
?
例如,集合中的每个文档都有一个createdDate
UTC,我想查询在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
}
}
])
推荐阅读
- json - 从杰克逊的一个对象到另一个对象的深层属性副本?
- android - 如何在导航抽屉中添加两个按钮并在每个按钮上显示不同的菜单项
- r - 如何在 R 中进行连续子集化并在每一步绘制计数?
- django - Django:电子邮件作为 html 发送以重置密码
- android - 致命异常:java.lang.NoClassDefFoundError 解析失败:某些设备中的 Ljava/time/Month
- javascript - 为什么 JS 在 API 28 中执行,而不是在 webview 中的 23 中执行?
- javascript - 如何在外部访问 Babel 生成的类,例如在 HTML 源代码中?
- kubernetes - 外部 ip 要么挂起,要么分配的 ip 不工作
- performance - HBase - 快照性能
- java - 为什么 Java SVNKit 在错误的位置添加文件夹