当前位置: 首页 > 知识库问答 >
问题:

如何在PostgreSQL(TypeORM)中使用两列进行搜索?

常睿范
2023-03-14

我目前正在研究如何在我的项目中实现搜索。我有一个名为users的表,它有两列,firstName和lastName。我希望能够在这两列之间搜索,例如,用户的名字是John,姓是Smith,因此当他们搜索John Smith时,它将返回具有该名称的用户。

或者他们可以只搜索名字等。解决这个问题的方法是什么?

使用PostgreSQL的全文功能是正确的途径吗?我目前正在使用Node w/TypeORM

共有1个答案

仰经武
2023-03-14

这是我在项目中经常使用的解决方案。

我使用条件扩展语法(...)来动态“构建”查询。有关更多信息,请参阅此内容。

function findUsers(firstName?: string, lastName?: string): Promise<User[]> {
    const userRepository = getRepository(User);

    return userRepository.find({
      where: {
        ...(firstName !== undefined && { firstName: firstName }),
        ...(lastName !== undefined && { lastName: lastName }),
      }
    });
}

注意,这种方法考虑了大小写字母之间的差异(区分大小写)。E、 g.<代码>约翰!==约翰。

使用示例

// Find all users
const allUsers = await findUsers(undefined, undefined); // You can remove this by checking if both parameters are undefined and throw an error

// Find all users with 'John' as first name
const allUsersJohnFirstName = await findUsers("John", undefined);

// Find all users with 'Doe' as last name
const allUsersDoeLastName = await findUsers(undefined, "Doe");

// Find all users named 'John Doe'
const allUsersJohnDoe = await findUsers("John", "Doe");

如果要区分大小写,请使用ILike运算符:

function findUsers(firstName?: string, lastName?: string): Promise<User[]> {
    const userRepository = getRepository(User);

    return userRepository.find({
      where: {
        ...(firstName !== undefined && { firstName: ILike(firstName) }),
        ...(lastName !== undefined && { lastName: ILike(lastName) }),
      }
    });
}
 类似资料:
  • 是的,我对这个问题非常认真。使用pip搜索是如何工作的? 关键字

  • 问题内容: 我有一个对象列表,列表很大。对象是 现在,我必须在列表中搜索对象的特定值。假设 我必须返回那些对象(我的搜索并不总是基于value3) 清单是 有效的方法是什么? 谢谢。 问题答案: 您可以尝试使用Apache Commons Collections。 有一个CollectionUtils类,允许您通过自定义谓词选择或过滤项目。 您的代码将如下所示: 更新: 在 java8中 ,使用

  • 我有一个对象列表,列表很大。对象是 现在我必须在列表中搜索一个对象的特定值。假设我必须返回这些对象(我的搜索不总是基于value3) 该列表为

  • 问题内容: 我需要清理生产服务器中的PostgreSQL数据库。我是新来的。所以任何人都知道PostgreSQL的步骤,请指导我。 我认为在生产服务器中提高PostgreSQL的性能非常有用。 问题答案: 连接到数据库并发出以下命令:“ VACUUM”。这导致可以在正常生产使用期间使用的“惰性模式”运行。建议您实际将其作为“真空分析”来调用,这也会更新统计信息。 如果要查看大量详细信息,可以在控制

  • 问题内容: 我正在使用Hibernate 4和Lucene 3.6。我对构面计数有要求。根据我的要求,我有一个实体“产品”。实体“产品”具有某些属性,例如ID,颜色,品牌。 现在,我的要求是,我想以多维方式获取该实体的商品数,并获取红色(彩色)耐克(品牌)服装的数量。 所以举个例子。我的数据库中保存了以下产品实体。 id品牌颜色 1锐步红 2锐步黑 3锐步绿 4利红 5利黑 6利黑 现在,我希望我

  • 在这里,我可以搜索python。 我希望放置负模式,实际上应该不会产生任何结果或不匹配。 当字符串包含python但字符串“在python上工作很容易”中不包含容易时,我喜欢使用re.search。我该怎么做?同时使用正负条件。