Nodejs中typeorm的simple-array如何查询?

发布于 1周前 作者 eggper 来自 nodejs/Nestjs

Nodejs中typeorm的simple-array如何查询?
保存到数据库中是 1,2,3 这样格式。当要查询 1,3 时,如何写代码?

1 回复

在Node.js中使用TypeORM时,如果你使用了simple-array类型来存储数组数据,查询这些数组元素可能需要一些特定的方法。TypeORM本身对数组类型的支持有限,特别是复杂查询,但你可以通过一些技巧来实现。

假设你有一个实体User,其中包含一个tags字段,该字段使用simple-array类型存储标签:

import { Entity, PrimaryGeneratedColumn, Column, SimpleArrayType } from "typeorm";

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column("simple-array")
  tags: string[];
}

要查询包含特定标签的用户,你可以使用FindOptionsWhereCondition结合QueryBuilder

import { getRepository } from "typeorm";
import { User } from "./entity/User";

async function findUsersByTag(tag: string): Promise<User[]> {
  const userRepository = getRepository(User);
  return userRepository.createQueryBuilder("user")
    .where("user.tags @> ARRAY[:tag]::varchar[]", { tag })
    .getMany();
}

findUsersByTag("nodejs").then(users => {
  console.log(users);
});

注意,上述代码中的@>操作符和ARRAY[:tag]::varchar[]类型转换是PostgreSQL特有的语法。如果你使用的是其他数据库(如MySQL),你需要调整查询语句以适应该数据库的数组查询语法。

确保你的数据库支持数组类型,并且你已经正确配置了TypeORM以使用这些特性。对于非PostgreSQL用户,你可能需要寻找其他方法或库来处理数组类型。

回到顶部