MongoDB 查询时区问题
1、默认时区是UTC,比北京时区晚八小时,北京时间=UTC+8h。
// 北京时间的 2024-10-01 08:00:00// (>) 大于 - $gt// (=) 大于等于 - $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.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.Filter.Gte(startDate) & Builders.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.Filter.Gte(\"date\", startDate) & Builders.Filter.Lt(\"date\", endDate);var result = collection.Find(filter).ToList();
通过以上方法,你可以根据具体的日期来查询MongoDB中的数据。选择最适合你需求的方法即可。