MongoDB 查询时区问题

发布于:2025-07-24 ⋅ 阅读:(21) ⋅ 点赞:(0)

1、默认时区是UTC,比北京时区晚八小时,北京时间=UTC+8h。

// 北京时间的 2024-10-01 08:00:00
// (>) 大于 - $gt
// (<) 小于 - $lt
// (>=) 大于等于 - $gte
// (<= ) 小于等于 - $lte
 
// Z代表UTC时区
 
1、{"gmtCreate":{"$gte":ISODate("2024-10-01T00:00:00Z")}
 
// +08:00 代表北京时区
 
2、{"gmtCreate":{"$gte":ISODate("2024-10-01T00:00:00+08:00")}

2、低版本的datax MongoDB的jar不支持+08:00这种写法,解决方式:

//获取每天新增数据的方式:
 
//${day} 代表yyyy-MM-dd的日期
 
{"gmtCreate":{"$gte":ISODate("${day-1d}T16:00:00Z")}
 
//例如:获取 2024-10-02 那天新增的数据
 
{"gmtCreate":{"$gte":ISODate("2024-10-01T16:00:00Z")}
 
// 或者多取点数据,去重时可同步处理掉
{"gmtCreate":{"$gte":ISODate("${day-1d}T00:00:00Z")}

3. 根据日期查询

假设你的文档中有一个日期字段名为date,你想查询某个特定日期的文档,你可以使用以下方法:

查询特定日期(如2023-01-01)
var dateToQuery = new BsonDocument("date", new BsonDateTime(new DateTime(2023, 1, 1)));
var filter = Builders<BsonDocument>.Filter.Eq(dateToQuery);
var result = collection.Find(filter).ToList();
查询日期范围(例如2023年1月1日至2023年1月31日)
var startDate = new BsonDocument("date", new BsonDateTime(new DateTime(2023, 1, 1)));
var endDate = new BsonDocument("date", new BsonDateTime(new DateTime(2023, 1, 31).AddDays(1).AddMilliseconds(-1))); // 注意:使用AddDays(1)然后减去毫秒来包含结束日期的最后一天
var filter = Builders<BsonDocument>.Filter.Gte(startDate) & Builders<BsonDocument>.Filter.Lt(endDate);
var result = collection.Find(filter).ToList();

4. 使用C# DateTime对象进行查询(推荐)

为了更方便地处理日期,你可以直接使用DateTime对象而不是BsonDateTime。这样可以避免手动处理日期格式:

var startDate = new DateTime(2023, 1, 1);
var endDate = new DateTime(2023, 1, 31).AddDays(1).AddMilliseconds(-1); // 注意:同上,包含最后一天的数据需要这样的技巧。
var filter = Builders<BsonDocument>.Filter.Gte("date", startDate) & Builders<BsonDocument>.Filter.Lt("date", endDate);
var result = collection.Find(filter).ToList();

通过以上方法,你可以根据具体的日期来查询MongoDB中的数据。选择最适合你需求的方法即可。


网站公告

今日签到

点亮在社区的每一天
去签到