首页 > 解决方案 > 如何使用与 UTC 不同的时区在 MongoDB 中按日期范围查找对象?

问题描述

由于 MongoDB 在 UTC 中存储日期对象,并且我的 Spring 应用程序的默认时区为America/New_York,如何按时区中的日期范围查询数据库America/New_York

例如,集合中的每个文档都有一个createdDateUTC,我想查询在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

标签: springmongodbdatetimespring-dataspring-data-mongodb

解决方案


您可能希望$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
        }
    }
])

参考:$dateFromString MongoDB 文档


推荐阅读