首页 > 解决方案 > 如果数据库中存在名称,则使用正则表达式搜索

问题描述

我正在使用正则表达式来检查数据库中是否已存在名称。我正在使用 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”的项目,则此正则表达式将找到该名称,并返回我已经有了该名称在数据库中。不知何故,如果我在新名称中添加一个|字符,这个正则表达式将只检查名称的第一部分,它位于|字符前面,并且由于我已经在 db 中有它的“abc”名称,它会返回那个名称“abc|something”已经存在。

标签: regexmongodb

解决方案


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

它是unique index. 在字段上创建索引,Title它将自动阻止您在该字段上插入重复值。

参考


推荐阅读