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;
当我试图让日期等于时,我无法得到我想要的结果。
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;