You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeORM中对字符串数组字段使用ILike进行模糊查询

实现TypeORM数组字段(skills)的部分匹配查询

针对你定义的UserEntity中skills数组字段,要实现类似ILike("%${query}%")的部分匹配搜索,可以利用PostgreSQL的内置函数来实现,以下是两种可靠的方案:

方案一:通过array_to_string转换数组后匹配

将数组转为字符串,再对字符串执行模糊匹配,适合不需要严格区分元素边界的场景:

import { getRepository } from "typeorm";
import { UserEntity } from "./path-to-user-entity";

async function searchUsersBySkillPartial(query: string) {
  const userRepository = getRepository(UserEntity);
  // 用不会出现在技能中的分隔符(比如|||)避免匹配干扰
  return await userRepository.createQueryBuilder("user")
    .where("array_to_string(user.skills, '|||') ILIKE :query", { query: `%${query}%` })
    .getMany();
}

方案二:通过unnest展开数组后匹配元素

将数组展开为单个元素,对每个元素单独做模糊匹配,再通过EXISTS确保用户至少有一个匹配的技能,这种方式更精准:

import { getRepository } from "typeorm";
import { UserEntity } from "./path-to-user-entity";

async function searchUsersBySkillPartial(query: string) {
  const userRepository = getRepository(UserEntity);
  return await userRepository.createQueryBuilder("user")
    .where("EXISTS (SELECT 1 FROM unnest(user.skills) AS skill WHERE skill ILIKE :query)", { query: `%${query}%` })
    .getMany();
}

注意事项

  • 以上方案基于PostgreSQL数据库(你的text array字段类型对应PostgreSQL的text[]),如果使用其他数据库(如MySQL),需要替换为对应数据库的数组处理语法。
  • 若要区分大小写,将ILIKE替换为LIKE即可。

内容的提问来源于stack exchange,提问作者user22128783

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:30:59