#c# #mongodb #mongodb-.net-driver
Вопрос:
Я не могу получить желаемый результат, когда пытаюсь получить дату, равную.
FilterDefinitionlt;dynamicgt; searchFilter = FilterDefinitionlt;dynamicgt;.Empty; string x = "system_create_date"; string y = "2021-11-08"; var SearchDAte = DateTime.Parse(y, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); searchFilter amp;= Builderslt;dynamicgt;.Filter.Eq(x, SearchDAte);
В результате ничего не возвращается.
Интересно, что я сделал не так?
Ответ №1:
В качестве предоставленного кода Eq
будет включено сравнение даты () со временем.
AFAIK, я не думаю, что можно напрямую сравнивать дату только в MongoDB, если только конкретное поле даты не содержит значения времени (пример: 2021-11-08T00:00:00.000 00:00).
Решение 1. Сравните дату в пределах диапазона
Поскольку вы хотите запросить документ(ы) в течение одного дня ( system_create_date
), следовательно:
Дата начала: 2021-11-08 (больше или равно)
Дата окончания: 2021-11-09 (менее)
FilterDefinitionlt;dynamicgt; searchFilter = FilterDefinitionlt;dynamicgt;.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 amp;= Builderslt;dynamicgt;.Filter.Gte(x, startDate); searchFilter amp;= Builderslt;dynamicgt;.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" } ) ); FilterDefinitionlt;dynamicgt; searchFilter = FilterDefinitionlt;dynamicgt;.Empty; searchFilter amp;= filterDoc;