首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在$gte中筛选$lte和$lte字符串

在$gte中筛选$lte和$lte字符串
EN

Stack Overflow用户
提问于 2022-08-04 19:33:11
回答 2查看 90关注 0票数 0

如何使用$gte和$lte添加字符串值的筛选器?我有一个StaredAt,但是是一个字符串类型。例如,如何在范围内过滤:

范围: 2022-02-02 / 2022-02-04

我试过了,但是抛出和异常:

代码语言:javascript
复制
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
                    }
                )
            );

例外是:

代码语言:javascript
复制
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) ] }
EN

回答 2

Stack Overflow用户

发布于 2022-08-08 08:58:38

我建议使用C# Mongodb提供程序。

这样您就可以避免BsonDocuments的嵌套,它可以简单到如下所示:

collection.AsQueryable().Where(x => x.From > StartDate && x.To < EndDate)

票数 0
EN

Stack Overflow用户

发布于 2022-08-08 12:16:48

为了使用$expr将字符串转换为日期,您可以创建一个包含和条件的表达式,该表达式结合了这两个条件:

代码语言:javascript
复制
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
                })
        }));

这相当于以下查询:

代码语言:javascript
复制
{
  $expr: {
    $and: [
      { $gte: [{ $toDate: "$StartDate" }, From] },
      { $lte: [{ $toDate: "$StartDate" }, To] },
    ];
  }
}

sidenote:如果您将文档中的日期从字符串转换为日期数据类型,这将简化查询,并将提高查询性能,因为您可以使用索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73241392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档