如何使用$gte和$lte添加字符串值的筛选器?我有一个StaredAt,但是是一个字符串类型。例如,如何在范围内过滤:
范围: 2022-02-02 / 2022-02-04
我试过了,但是抛出和异常:
var subfilter = new BsonDocument("$expr",
new BsonDocument("$gte",
new BsonArray {
new BsonDocument("$toDate", "$StartDate"),
From
}
)
);
var subfilterTo = new BsonDocument("$expr",
new BsonDocument("$lte",
new BsonArray {
new BsonDocument("$toDate", "$StartDate"),
To
}
)
);例外是:
MongoDB.Driver.MongoCommandException: Command find failed: An object representing an expression must have exactly one field: { $gte: [ { $toDate: "$StartDate" }, new Date(1663124400000) ], $lte: [ { $toDate: "$StartDate" }, new Date(1663210799000) ] }发布于 2022-08-08 08:58:38
我建议使用C# Mongodb提供程序。
这样您就可以避免BsonDocuments的嵌套,它可以简单到如下所示:
collection.AsQueryable().Where(x => x.From > StartDate && x.To < EndDate)
发布于 2022-08-08 12:16:48
为了使用$expr将字符串转换为日期,您可以创建一个包含和条件的表达式,该表达式结合了这两个条件:
new BsonDocument("$expr", new BsonDocument("$and", new BsonArray
{
new BsonDocument("$gte",
new BsonArray
{
new BsonDocument("$toDate", "$StartDate"),
From
}),
new BsonDocument("$lte",
new BsonArray
{
new BsonDocument("$toDate", "$StartDate"),
To
})
}));这相当于以下查询:
{
$expr: {
$and: [
{ $gte: [{ $toDate: "$StartDate" }, From] },
{ $lte: [{ $toDate: "$StartDate" }, To] },
];
}
}sidenote:如果您将文档中的日期从字符串转换为日期数据类型,这将简化查询,并将提高查询性能,因为您可以使用索引。
https://stackoverflow.com/questions/73241392
复制相似问题