带日期的MongoDB过滤器不会用c#返回任何结果

本文关键字:返回 任何 结果 日期 MongoDB 过滤器 | 更新日期: 2023-09-27 18:12:04

我使用c#与visual studio 2015/MongoDB c#驱动程序NuGET包。我遇到了日期过滤和排序的问题。

我已经创建了以下MetricBatch类

class MetricsBatch
{
    public MongoDB.Bson.ObjectId _id { get; set; }
    public MongoDB.Bson.BsonDateTime BatchStartTime { get; set; }
    public MongoDB.Bson.BsonDateTime    BatchEndTime { get; set; }
    public string MetricsType { get; set; }
}

我已经创建了这个类的对象"objMetricsBatch"并插入MongoDB

var batchCollection = _database.GetCollection<MetricsBatch>("MetricsBatch");
batchCollection.InsertOneAsync(objMetricsBatch);

它成功插入,因为我可以看到记录。如果我不使用任何过滤器,但是当我把下面的日期过滤器没有得到任何结果时,我尝试了许多选项,但没有成功。

MongoDB.Bson.BsonDateTime strtDate = new BsonDateTime(DateTime.Today.AddDays(-2) )
var filter2 = Builders<MetricsBatch>.Filter.Gte("TradeBatchStartTime", strtDate);
var result2 = await apmMetricsCollection.Find<MetricsBatch>( filter2 ).ToListAsync();

没有结果得到回报,不知道为什么。我也尝试了一些日期,但似乎也不起作用。

请建议。

带日期的MongoDB过滤器不会用c#返回任何结果

我进一步检查了我的代码,发现如下,在下面的过滤器中,我把字段名作为" tradabchstarttime "而不是"BatchStartTime"。令人惊讶的是,c#的MangoDB或MangoDB驱动程序不会给出任何错误。我不确定为什么芒果db不给出警告或错误的原因。或者可能是c# MangoDB驱动程序中的一些错误。

现在尝试检查如何将mongodb文档和位之间的关系放在聚合上。

var filter2 = Builders.Filter。一种("TradeBatchStartTime",strtDate);

这不是MongoDB c#驱动程序的问题。由于MongoDB是NoSQL数据库,因此数据库没有任何特定的模式。因此,在第一个代码中,当你用' tradabchstarttime '字段搜索时,查询试图找到"是否有任何文档包含' tradabchstarttime '字段的值大于'startDate'的值?"但是,由于数据库中没有任何名为' tradabchstarttime '的字段,因此查询返回没有结果。

当你使用POCO模型时,如果你想要类型安全,那么你可以使用使用LINQ的另一个重载Gte过滤器定义。如下:

var filter2 = Builders<MetricsBatch>.Filter.Gte(x=>x.BatchStartTime , strtDate); 

现在它会一个编译时错误,如果你比较' tradabchstarttime '字段而不是'BatchStartTime'。希望这对你有帮助。