Regex 如果数据库中存在名称,则使用正则表达式进行搜索

Regex 如果数据库中存在名称,则使用正则表达式进行搜索,regex,mongodb,Regex,Mongodb,我正在使用正则表达式检查数据库中是否已经存在名称。我用的是mongo过滤器 我是这样使用的: if (String.IsNullOrEmpty(title) == false) { List<FilterDefinition<object>> MyFilters = new List<FilterDefinition<object>>(); MyFilters.Add(Builders<object>.Filter.Eq(

我正在使用正则表达式检查数据库中是否已经存在名称。我用的是mongo过滤器

我是这样使用的:

if (String.IsNullOrEmpty(title) == false)
{
   List<FilterDefinition<object>> MyFilters = new List<FilterDefinition<object>>();

   MyFilters.Add(Builders<object>.Filter.Eq(x => x.object.id, objectDefinitionId));
   MyFilters.Add(Builders<object>.Filter.Eq(x => x.Status, ObjectItemStatus.Accepted));
   MyFilters.Add(Builders<object>.Filter.Regex(x => x.Title, new BsonRegularExpression(String.Format(@"^\s*{0}\s*$", title.Trim().ToLower().EscapeRegExCharacters()), "i")));               
}

Int64 MyCount = await m_TenantMongoClient.MongoDbDatabase.GetCollection<object>("collection")
                .CountDocumentsAsync(Builders<object>.Filter.And(MyFilters));

MyResult = MyCount > 0 ? true : false;
if(String.IsNullOrEmpty(title)=false)
{
List MyFilters=新列表();
添加(Builders.Filter.Eq(x=>x.object.id,objectDefinitionId));
添加(Builders.Filter.Eq(x=>x.Status,ObjectItemStatus.Accepted));
添加(Builders.Filter.Regex(x=>x.Title,新的BsonRegularExpression(String.Format(@“^\s*{0}\s*$”,Title.Trim().ToLower().EscapeRegExCharacters(),“i”));
}
Int64 MyCount=wait m_TenantMongoClient.MongoDbDatabase.GetCollection(“collection”)
.countDocumentsSync(Builders.Filter.And(MyFilters));
MyResult=MyCount>0?真:假;
问题是,如果我在数据库中有一个名称,例如:“abc”,并且如果我想添加另一个名为“abc | something”的项目,这个正则表达式将找到该名称,并且返回我已经在数据库中有该名称。不知何故,如果我在新名称中添加一个
|
字符,这个正则表达式将只检查名称的第一部分,即
|
字符前面,因为我在数据库中已经有了“abc”名称,它将返回已经存在的名称“abc | something”

@Gibbs-“abc”是数据库中已经存在的值,字段名是“Title”,因为我在问题中复制粘贴的是我的查询。我还需要插入“abc | xxx”,但我的查询找到了“abc”条目,因此我无法插入

它是
唯一索引
的完美用例。在字段
Title
上创建索引,它将自动防止您在该字段上插入重复值


听起来不是100%清晰。首先,为什么你需要一个所有格量词?使用简单的
@“^\s*{0}\s*$”
。接下来,您的输入是什么?如果您的“title”是
abc|something
,并且您通过
^\s*abc\s*$
regex来匹配它,结果将是错误的,它无法匹配。@WiktorStribiżew-我已经尝试了您建议的regex-@“^\s*{0}\s*$”-但这样它还会检测到我在数据库中已经有了该名称。所以我需要检查数据库中是否已经存在一个名称。我的正则表达式工作正常,但有一种情况不正常。例如,如果我在db中已经有了“abc”,并且我想插入一个新对象“abc | xxx”,那么它会返回我已经有了一个名称不合理的对象。正则表达式本身不检查数据库内容,您需要使用一些方法或函数来检查。你可能需要一个simel等式比较,而不是正则表达式。@WiktorStribiżew-我不是单独使用正则表达式。我用我正在使用的函数来检查这个问题,不管它的名称是什么,或者我不能正确理解,你是否希望把代码< > <代码>当作正则表达式的一部分?想逃避吗?这不是正确的解决方案。主要问题是,正则表达式将I字符视为or。因此,如果我想添加一个名为“abc | xxx”的新对象,那么正则表达式将选中“abc”或“xxx”。。。这就是为什么我不能插入名称“abc | xxx”。但是我想插入一个包含I字符的名称。但无论如何,谢谢你的帮助。试着避开管道符号