查询不起作用也需要之前的日期数据

问题描述 投票:0回答:1
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);

这是我的代码,但对于当前日期,它需要之前日期的一些数据。

我尝试用不同的方法和不同的日期来做。我只想计算当前日期。

c# mongodb iis-express
1个回答
0
投票

我已经在我的机器上成功复制了这个问题。根据您的代码,当您呈现查询时,您将观察到以下输出:

{
  "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")
}

这应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.