我正在尝试创建过滤器并按日期范围查找记录。问题是,我们的mongo服务器中的日期(遗憾的是,它在历史上是这样的,并且是从另一个数据库导入的)以字符串类型存储,格式为“dd / MM / yyyy hh:mm:ss”。如何从用户输入日期过滤?无论我尝试过什么,我都得到错误的结果。
以下是一些代码:
[Serializable]
public class Error
{
[BsonElement("projectName")]
public string projectName { get; set; }
[BsonElement("programName")]
public string programName { get; set; }
[BsonElement("errorDescription")]
public string errorDescription { get; set; }
[BsonElement("userDescription")]
public string userDescription { get; set; }
[BsonElement("logDateTime")]
[BsonSerializer(typeof(DateSerializer))]
public DateTime logDateTime { get; set; }
[BsonElement("writeDateTime")]
public string writeDateTime { get; set; }
}
这是DateSerializer:
public class DateSerializer: SerializerBase<DateTime>
{
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, DateTime value)
{
context.Writer.WriteString(value.ToString(CultureInfo.InvariantCulture));
}
public override DateTime Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var dateText = context.Reader.ReadString();
return convertToDate(dateText);
}
private DateTime convertToDate(string dateText)
{
CultureInfo ci = new CultureInfo(CultureInfo.CurrentCulture.Name);
ci.DateTimeFormat.ShortDatePattern = "dd'/'MM'/'yyyy";
ci.DateTimeFormat.LongTimePattern = "hh':'mm tt";
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
string format = "dd/MM/yyyy HH:mm:ss";
DateTime dateTime = DateTime.ParseExact(dateText, format, ci);
return dateTime;
}
}
在我的过滤器上:
DateTime dateTime2 = DateTime.ParseExact(date, format, ci);
var fromDateFilter = builder.Gte(x => x.error.logDateTime, dateTime2);
并最终:
filter = filter & fromDateFilter;
var results = errorCollection.Find(filter).ToList();
我尝试了许多不同的方法,但似乎无法使比较正常工作。
修改:我只关心日期。时间不是很重要。
编辑2 - 显然它只比较当天,例如它返回01/06/2017(年/月/日)小于06/02/2017(年/月/日) YYYY)。 2017年6月5日至2017年6月6日也是如此。