我正在使用 C# 的 MongoDB 驱动程序,我正在查询以从集合中获取与字段匹配的项目列表。
我正在使用带有以下表达式的 BsonRegularExpression 对象:
"/.*" + summonerName + "/"
这相当于 Sql 中的 LIKE,但是当我希望它不区分大小写时问题就来了。为此,许多网站评论说它必须是这样的:
BsonRegularExpression expReg = new BsonRegularExpression("/.*" + summonerName + "/", "i");
当我把这样的选项参数放在表达式后面时:“i”,它只是不返回任何东西。我把整个代码留在这里:
public static List<Summoner> GetSummonerByName(String summonerName)
{
try
{
var database = dbClient.GetDatabase(databaseName);
var collection = database.GetCollection<Summoner>(collectionSummoner);
String nombreRegex = "";
var nombreChar = summonerName.ToCharArray();
foreach(Char caracter in nombreChar)
{
nombreRegex += "*";
nombreRegex += caracter;
}
//var filter = Builders<Summoner>.Filter.Regex(u => u.name, new BsonRegularExpression("/.*C*o*r*b*a*n/"));
BsonRegularExpression expReg = new BsonRegularExpression("/.*" + summonerName + "/");
var filter = Builders<Summoner>.Filter.Regex(u => u.name, expReg);
var resultado = collection.Find(filter).ToList();
if(resultado.Count() == 0)
{
InsertSummoner(RiotApiConnectorService.GetSummonerByName(summonerName));
GetSummonerByName(summonerName);
}
return resultado;
}
catch (Exception error)
{
return null;
}
}
有没有人在 C# 中的 mongo 驱动程序中使用正则表达式?提前致谢!
最佳答案
你应该把它定义为
BsonRegularExpression expReg = w BsonRegularExpression(Regex.Escape(summonerName), "i")
这里的重点是 BsonRegularExpression
正则表达式定义不应包含正则表达式分隔符,/
在你的情况下。使用 BsonRegularExpression
执行正则表达式实例化类,并且正则表达式分隔符只是多余的,在这里被视为文字 /
在图案中。没有匹配项,因为您的数据没有斜线。接下来就不需要
.*
这里因为正则表达式在输入文本的任何位置搜索匹配,它不需要完整的字符串匹配(与 LIKE
运算符的情况一样)。备注
Regex.Escape(summonerName)
仅在 summonerName
中存在特殊正则表达式元字符时才使用,如果不使用该方法,搜索可能会失败。
关于c# - MongoDB 中的正则表达式 + 选项(C# 驱动程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65618023/