如果数据库中存在名称,则使用regex进行搜索



我使用正则表达式来检查数据库中是否已经存在名称。我正在使用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;

问题是,如果我在数据库中有一个名称,例如:";abc";如果我想添加另一个名称为";abc|something";,这个正则表达式将找到名称,并返回我已经在数据库中拥有该名称。不知怎的,如果我在新名称中添加一个|字符,这个正则表达式将只检查名称的第一部分,它位于|字符前面,并且由于我已经在数据库中有了它;abc";name,则它将返回名称";abc|something"已经存在。

@Gibbs-"abc";它是数据库中已经存在的值,字段名称为";标题";,正如我在问题中复制粘贴的那样。我还需要插入";abc|xxx";,但是我的查询发现";abc";条目,所以我不能插入

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

参考

最新更新