mongodb 查询不起作用也会采用以前的日期数据

kdfy810k  于 2023-10-16  发布在  Go
关注(0)|答案(1)|浏览(88)
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);

这是我的代码,但对于当前日期,它需要一些以前日期的数据。
我试着用不同的方法和不同的日期做。我只想要当前日期的计数。

5kgi1eie

5kgi1eie1#

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

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

这应该可以解决问题。

相关问题