我的要求很简单。我有一些包含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回归我想要的东西。我应该使用什么过滤器来检索在指定日期发生的所有文档?
感谢您的时间。
答案 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);