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”的项目,则此正则表达式将找到该名称,并返回我已经有了该名称在数据库中。不知何故,如果我在新名称中添加一个|
字符,这个正则表达式将只检查名称的第一部分,它位于|
字符前面,并且由于我已经在 db 中有它的“abc”名称,它会返回那个名称“abc|something”已经存在。
解决方案
@Gibbs - “abc”是数据库中已经存在的值,字段名称是“Title”,因为它是在我的查询中复制粘贴到问题中的。而且我还需要插入“abc|xxx”,但是我的查询找到了“abc”条目,所以无法插入
它是unique index
. 在字段上创建索引,Title
它将自动阻止您在该字段上插入重复值。
推荐阅读
- sql - 在 postgres 的多个订单表中,无法从表(订单)中删除其 id 列作为外键的记录
- javascript - 仅从 tsconfig 为 Dev 发出 SourceMaps
- sql - Postgres upsert 不增加序列号?
- c# - 从 xml 读取特定元素
- python - 在 google colab 上导入 osmnx 给我一个错误
- mongodb - Mongodb Ref动态填充grapqhl?
- r - ggplotly 获取点击的数据值
- php - 字段 'fullname' 没有默认值(SQL:插入到 `contacts` (`updated_at`, `created_at`)
- javascript - “TypeError:无法读取未定义的属性‘push’”Vuejs
- python - Django:为 EMAIL_HOST 强制使用 ipv4?(GMail: 421, '4.7.0 稍后再试,关闭连接。')