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)


















