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

Time:11-17

I am unable to get the result I wanted when I try to get Date equal to.

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);

Nothing returns as a result.

I wonder what I have done wrong.

CodePudding user response:

As the provided code, the date comparison (Eq) will be included with Time.

AFAIK, I don't think it is doable to directly compare Date only in MongoDB unless the particular date field is without time value (Example: 2021-11-08T00:00:00.000 00:00).


Solution 1: Compare date within the range

Since you want to query the document(s) within one day (system_create_date), hence:

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);

Solution 2: With BsonDocument

With BsonDocument, you can compare date only by converting system_create_date to date string.

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;
  • Related