在一天中查询Mongo数据库的记录

时间:2015-10-23 16:35:28

标签: c# mongodb mongodb-.net-driver

我的要求很简单。我有一些包含startTime(一个DateTime字段)的Mongo文档,我想查询所有在特定日期startTime的文档的包含集合。

例如,我想要所有日期为“22/10/2015”的文档,我不关心时间组件,我只想要所有具有该日期的文档。

我已经写了以下方法尝试来执行此操作

public static async Task<List<uint>> DateRangeToEventIDAdapter(
    MongoClient client, DateTime startDate, DateTime endDate, int? limit, 
    IProgress<string> progress, CancellationToken token)
{
    if (startDate == endDate)
        endDate = endDate.AddDays(1.0);

    var filterBuilder = Builders<BsonDocument>.Filter;
    var filter = filterBuilder.Gte(
        MatchDetailsFields.START_TIME, BsonDateTime.Create(startDate.ToUniversalTime()));
    filter = filterBuilder.And(filter, filterBuilder.Lte(MatchDetailsFields.START_TIME,
        BsonDateTime.Create(endDate.ToUniversalTime())));

   // Use Filter to get collection here...
}

[使用C#Driver 2.0]。我的问题是startDate == endDate,如果我只使用Eq.,则返回零记录。因此,我尝试将startDate的{​​{1}}添加24小时,然后使用endDate.Lte - 此操作不起作用并返回两天。

这看起来很简单,但我可以让Mongo回归我想要的东西。我应该使用什么过滤器来检索在指定日期发生的所有文档?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

这对我有用(你应该使用Lt而不是Lte):

var theDay = new DateTime(2015,10,22).ToUniversalTime();

var builder = Builders<BsonDocument>.Filter;
var filter = builder.Gte(  "startTime" , theDay ) &
             builder.Lt( "startTime", theDay.AddDays(1) ) ;

var list = await col.Find( filter ).ToListAsync();

您可以将其编码为:

endDate = endDate.Date.AddDays(1);