DateTime currentDate = DateTime.Now.Date;
DateTime nextDate = currentDate.AddDays(1);
var filter1 = Builders.Filter.Gte(td => td.Txn_Date, currentDate) & Builders.Filter.Lt(td => td.Txn_Date, nextDate);
long count = _dbContext.TransactionDetails.CountDocuments(filter1);
这是我的代码,但对于当前日期,它需要之前日期的一些数据。
我尝试用不同的方法和不同的日期来做。我只想计算当前日期。
我已经在我的机器上成功复制了这个问题。根据您的代码,当您呈现查询时,您将观察到以下输出:
{
"Txn_Date": {
"$gte": ISODate("2023-10-06T18:30:00Z"),
"$lt": ISODate("2023-10-07T18:30:00Z")
}
}
我认为问题在于
currentDate
的使用。为了解决这个问题,我进行了修改,将 currentDate
替换为 DateTime.Now
,并按如下方式应用了过滤器:Builders.Filter.Eq(td => td.Txn_Date, currentDate)
。
下面,您可以找到完整的代码(请注意,代码中使用的顺序是假设的):
using MongoDB.Bson.Serialization;
using MongoDB.Driver;
using System;
public class Program
{
public static void Main()
{
DateTime currentDate = DateTime.Now;
// DateTime nextDate = currentDate.AddDays(1);
var filter1 = Builders<Order>.Filter.Eq(td => td.Txn_Date, currentDate);
var documentSerializer = BsonSerializer.SerializerRegistry.GetSerializer<Order>();
var renderedFilter = filter1.Render(documentSerializer, BsonSerializer.SerializerRegistry);
Console.WriteLine(renderedFilter);
// long count = _dbContext.TransactionDetails.CountDocuments(filter1);
}
}
internal class Order
{
public DateTime Txn_Date { get; set; }
}
现在,它根据当前日期进行过滤,如下所示:
{
"Txn_Date": ISODate("2023-10-07T11:51:05.968Z")
}
这应该可以解决问题。