如何通过C#driver by DateTime在Mongo集合中查找条目?

如何通过C#driver by DateTime在Mongo集合中查找条目?,c#,mongodb,C#,Mongodb,我在Mongo集合中保留了一组结构如下的对象。我尝试重新整理最重要的点,比如伪代码,希望没有遗漏任何基本函数来理解我的问题: public class O { [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } public int c { get; set; } [BsonElement] [BsonDateTimeOptions

我在Mongo集合中保留了一组结构如下的对象。我尝试重新整理最重要的点,比如伪代码,希望没有遗漏任何基本函数来理解我的问题:

public class O {
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    public int c { get; set; }
    
    [BsonElement]
    [BsonDateTimeOptions(DateOnly = true)]
    public DateTime date { get; set; }
}
通过ASP.NET核心控制器类,发出按日期查找对象的请求:

public class Contrl : ControllerBase {
    private readonly OService _oserv;

    [HttpGet]
    public ActionResult<O> GetByDate([FromQuery] int c, [FromQuery] DateTime date) {
        _oserv.GetByDate(c, date);
    }
}
我收到一个HTTP 500错误,错误消息中说:

System.ArgumentException: Unsupported filter: 
value(proj.Services.OService).IsSameDate({document}{date}, 20/02/2020 00:00:00).

因此,它看起来朝着正确的方向发展,但它在helper方法中没有使用
o.date
,而是使用
{document}{date}
,这是什么,以及如何正确地做到这一点?

如果只想按日期过滤,则有以下方法:

首先,您必须创建两个日期,如下所示

public List<O> GetByDate(int c, DateTime date) {
   var startDate = new DateTime(date.Year, date.Month, date.Day);
   var endDate = startDate.AddDays(1);

   var filter = Builders<O>.Filter.Gte(x => x.date, startDate)
                 & Builders<O>.Filter.Lt(x => x.date, endDate);

   //Note get your Collection before this line and then use it.

   O searchResult = await Collection.Find(filter).FirstOrDefaultAsync();
 }
public List GetByDate(int c,DateTime-date){
var startDate=新的日期时间(date.Year、date.Month、date.Day);
var endDate=开始日期。添加日期(1);
var filter=Builders.filter.Gte(x=>x.date,startDate)
&Lt(x=>x.date,endDate);
//注意:在这一行之前获取您的收藏,然后使用它。
O searchResult=await Collection.Find(filter.FirstOrDefaultAsync();
}
public List<O> GetByDate(int c, DateTime date) {
   var startDate = new DateTime(date.Year, date.Month, date.Day);
   var endDate = startDate.AddDays(1);

   var filter = Builders<O>.Filter.Gte(x => x.date, startDate)
                 & Builders<O>.Filter.Lt(x => x.date, endDate);

   //Note get your Collection before this line and then use it.

   O searchResult = await Collection.Find(filter).FirstOrDefaultAsync();
 }