MongoDB Driver Builders<dynamic> 不按日期工作

MongoDB Driver Builders<dynamic> dont work on equal to date

当我试图让日期等于时,我无法得到我想要的结果。

FilterDefinition<dynamic> searchFilter = FilterDefinition<dynamic>.Empty;
string x = "system_create_date";
string y = "2021-11-08";   
var SearchDAte = DateTime.Parse(y, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
searchFilter &= Builders<dynamic>.Filter.Eq(x, SearchDAte);

没有结果 returns。

我想知道我做错了什么。

作为提供的代码,日期比较 (Eq) 将包含在 Time 中。

AFAIK,我认为仅在 MongoDB 中直接比较日期是不可行的,除非特定日期字段没有时间值(示例:2021-11-08T00:00:00.000+00: 00).


解决方案 1:比较范围内的日期

由于您想查询一天内的文档(system_create_date),因此:

Start Date: 2021-11-08 (greater than or equal to)

End Date: 2021-11-09 (less than)

FilterDefinition<dynamic> searchFilter = FilterDefinition<dynamic>.Empty;
string x = "system_create_date";
string y = "2021-11-08";
string z = "2021-11-09";

var startDate = DateTime.Parse(y, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
var endDate = DateTime.Parse(z, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);

searchFilter &= Builders<dynamic>.Filter.Gte(x, startDate);
searchFilter &= Builders<dynamic>.Filter.Lt(x, endDate);

解决方案 2:使用 BsonDocument

使用BsonDocument,您只能通过将system_create_date转换为日期字符串来比较日期。

BsonDocument filterDoc = new BsonDocument("$expr", 
    new BsonDocument("$eq",
        new BsonArray
        {
            new BsonDocument("$dateToString",
            new BsonDocument
            {
                { "format", "%Y-%m-%d" },
                { "date", "$system_create_date" }
            }),
            "2021-11-08"
        }
    )
);

FilterDefinition<dynamic> searchFilter = FilterDefinition<dynamic>.Empty;
searchFilter &= filterDoc;