Разработчики драйверов MongoDB не работают на сегодняшний день

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