Loading...

MongoDB, 学习MongoDB数据库的管理与维护,了解NOSQL数据的高性能开发在实际开发中的应用。

当前位置:首页MongoDB

c# MongoDB.Driver中and和or同时查询的情况 且或查询操作

发布时间:2024-12-23 22:15
c# MongoDB.Driver中and和or同时查询的情况 且或查询操作

一、查询操作面临and 同时又要有or操作时

如下的场景需要,默认条件 是查询某个用户的数据,但是输入关键字时,即要查询此用户的数据,又要在此用户的数据中搜索 标题包含此关键字或内容包含此关键字的騒操作。

var query = Builders<BsonDocument>.Filter;
var filter = query.And(
    query.Eq("username", userInfo.Username),
    query.Eq("isdelete", 0)
    );
//正则查询,相当于 infotags in(keyword)
//filter1list.Add(builderFilter.Regex("infotags", new BsonRegularExpression(keyword, "-i")));
if (!string.IsNullOrWhiteSpace(keywords))
{
    keywords = HttpUtility.UrlDecode(keywords);
    filter = query.And(
    query.Eq("username", userInfo.Username),
    query.Eq("isdelete", 0)
    , query.Or(
        query.Regex("wxname", new BsonRegularExpression(keywords, "i|m|x")),
        query.Regex("tag", new BsonRegularExpression(keywords, "i|m|x")),
        query.Regex("remark", new BsonRegularExpression(keywords, "i|m|x"))
        )
    );
}

此种写法不是很优雅。下面再浪一下,进行更騒的操作

//创建约束生成器
FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
//排序生成器
SortDefinitionBuilder<BsonDocument> builderSort = Builders<BsonDocument>.Sort;
//排序约束   Ascending 正序    Descending 倒序
SortDefinition<BsonDocument> sort = builderSort.Descending("inserttime");
//约束条件
List<FilterDefinition<BsonDocument>> filter1list = new List<FilterDefinition<BsonDocument>>();
FilterDefinition<BsonDocument> filter = Builders<BsonDocument>.Filter.Empty;
filter1list.Add(builderFilter.Eq("username", userInfo.Username));
filter1list.Add(builderFilter.Eq("isdelete",0));
if (!string.IsNullOrWhiteSpace(keywords))
{
    keywords = HttpUtility.UrlDecode(keywords);
    filter1list.Add(
                builderFilter.Or(builderFilter.Regex("wxname", new BsonRegularExpression(keywords, "i|m|x")),
                builderFilter.Regex("tag", new BsonRegularExpression(keywords, "i|m|x")),
                builderFilter.Regex("remark", new BsonRegularExpression(keywords, "i|m|x")))
    );
}
if (filter1list.Count > 0)
{
    filter = builderFilter.And(filter1list.ToArray());
}

这样就可以实现且或操作了, 相当于sql中的 select * from table where username="zhangsan" and isdelete=0 and (tag like '%keywords%' or wxname like '%keywords%' or remark like '%keywords%') , 牛逼plus!

二、注意注意!!!!!! 上面的正则在 MongoDB 7.0.8 版本中无效, 在 MongoDB 7.0.8版本中应为如下书写 

改 new BsonRegularExpression(keywords, "i|m|x")
为 new BsonRegularExpression(keywords)
mongodb数据库的导入导出全部集合单个集合的导入导出(mongodump和mongorestore的使用)

mongodb数据库的导入导出(mongodump和mongorestore的使用),mongodb导入导出, mongo导出导入, mon

shell脚本自动备份压缩mongodb数据库(mongodb数据库备份)

shell脚本自动备份压缩mongodb数据库(mongodb数据库备份)定义备份目录和文件名, 把该内容保存在此文件夹的位置,然后命名为。

Shell脚本一键自动备份mongodb数据库

Shell脚本一键自动备份mongodb数据库,定义备份目录和文件名, 把该内容保存在此文件夹的位置,然后命名为。xxx.sh ,一会儿会执

Mongodb循环整个数据库进行数据处理 mongodb数据库分页读取

Mongodb循环整个数据库进行数据处理,应用场景,有时候需要对整个数据库进行数据处理,需要读取整个数据库,如果数据量较大,一次性读取则会卡

Mongodb常用脚本 mongo增删改查脚本

查询某个字段是否存在:如查询所有存在updatetime字段的数据的总条数,因为mongodb和关系型数据库mysql, sqlserver

提供免费的服务器维护、网站维护、宝塔面板的安装及运行。

网站编写代码分享

网站收录效果不好,自然会影响排名,网站优化首先第一步是要搞好网站收录

网络营销