使用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
相关产品推荐
相关产品推荐

