MongoDB C#过滤日期时间存储为字符串

时间:2017-12-16 02:37:30

标签: c# mongodb

我正在尝试创建过滤器并按日期范围查找记录。问题是,我们的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日也是如此。

0 个答案:

没有答案