环回过滤器如何不区分大小写?

3
如何在Loopback中使用PostgreSQL实现不区分大小写的where过滤器。我已经尝试使用:
pattern = new RegExp('.*'+data+'.*', "i")

但是不起作用。 我的代码是

searchUsersAppointment(data): void {
    let cpr = /^\d+$/.test(data);
    let pattern = new RegExp('.*'+data+'.*', "i");
    let query = {};
    if(cpr){
        query = {where: {CPR: {like: data} } };
    }else{
        query = {where: {firstName: {like: pattern} } };
    }
    this.patientDetailsApi.find(query).subscribe(searchDetails => {
        this.searchDetails = searchDetails;
    })
}

有人可以帮我解决这个问题吗?


1
@RahulSingh 我找到了解决方案,将 query = {where: {firstName: {like: pattern} } }; 更改为 **query = {where: {firstName: {regexp: data+"/i"} } };**。 - Nijesh W
3个回答

4

在Loopback中,不需要使用Regex进行大小写不敏感的搜索。

如果您正在使用支持ANSI SQL格式的数据库,例如MySql、PostgreSql,则可以使用以下代码片段:

filter.where = {
  name: { 
    ilike: '%'+ search_string +'%'
  }
};

如果您正在使用像MongoDb这样的noSQL数据库,请使用以下代码片段:
where = {
  name: {
    like: search_string,
    options: "i" 
  }
};

如果我想同时在两个字段上进行搜索查询,该怎么做? 例如:firstName,lastName,middleName @Nahid - bhaRATh
2
你可以在where子句中使用OR运算符来组合搜索过滤器。 - Nahid Ali

1

花了我一天时间摸索,因为大多数答案似乎只对其他特定的连接起作用。

这是对我有效的方法:

数据源: loopback-connector-oracle

where: { 
   property: { regexp: `/^${query}/i` }
}
REST API:

?filter={"where":{"userName":{"regexp":"/^query/i"}}}

此操作执行以下验证:

let str = 'john_smith'
console.log(/^john_smith/i.test(str)) //true
console.log(/^joHN_Smith/i.test(str)) //true
console.log(/^ohn_Smith/i.test(str2)) //false
console.log(/^John_mith/i.test(str2)) //false


0
如果您正在使用像MongoDb这样的noSQL数据库,并且使用loopback4,则可以使用以下代码片段:
const pattern = new RegExp('^' + request.search + '.*', "i");
where: { 
   name: { regexp: pattern }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接