You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#从MongoDB仅按日期查询并保存本地时间的问题

MongoDB日期查询问题及本地时间存储解决方案

我最近在尝试仅通过日期查询MongoDB集合中的记录,确认指定日期的记录是否存在,试了好几种方法都没成功,同时还在研究怎么把日期时间保存为本地时间,这里把我的经历和解决方法分享出来。

场景还原

我的MongoDB集合示例文档如下:

{ 
  "_id" : ObjectId("5a4f8026762caf03f0a22114"), 
  "AttnDate" : ISODate("2018-01-04T20:00:00.000Z"), 
  "AllAttendances" : [ { 
    "FullName" : "MYDOMAIN\\Michelle", 
    "Logged" : ISODate("2018-01-05T13:39:35.338Z"), 
    "IdleTime" : 17 
  } ] 
}

对应的C# Attendance实体类代码:

public class Attendance { 
    [JsonConverter(typeof(ObjectIdConverter))] 
    public ObjectId Id { get; set; } 
    [BsonDateTimeOptions(Kind = DateTimeKind.Local)] 
    public DateTime AttnDate { get; set; } 
    public IEnumerable<TimeRecord> AllAttendances { get; set; } 
}

我写的查询方法:

public Attendance FindAttendanceByDate(DateTime CurrentDate) { 
    var filter = Builders<Attendance>.Filter.Eq(x => x.AttnDate, CurrentDate); 
    return context.Attendances.Find(filter).FirstOrDefault(); 
}

调用方式:

_AttendancesRepositories.FindAttendanceByDate(DateTime.Today);

不管怎么调整查询逻辑,就是查不到对应的记录,折腾了好久都没头绪。

意外解决方法

最后我抱着试试的心态,关闭了Windows设置里的自动设置时间和自动设置时区选项,居然成功查到记录了!虽然我还没搞清楚具体原因,但这个方法确实解决了我的问题,希望能帮到遇到同样坑的开发者,节省你们排查问题的时间。

另外补充下本地时间存储的配置:我在实体类的AttnDate属性上添加了[BsonDateTimeOptions(Kind = DateTimeKind.Local)]特性,这样MongoDB会把DateTime按照本地时间的格式来存储和映射,这个配置是有效的,大家可以参考。

内容的提问来源于stack exchange,提问作者Aatish Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:13:42