Node.js 使用TypeForm在postgres的数组中搜索项目

Node.js 使用TypeForm在postgres的数组中搜索项目,node.js,postgresql,typescript,express,typeorm,Node.js,Postgresql,Typescript,Express,Typeorm,数据库:postgres ORM:Typeorm 框架:express.js 我有一个表,其中一个名为projects的字段是字符串数组。在迁移中,类型设置为“varchar”,反装饰器设置为“simple array” 在我的获取路径中,如果我收到一个查询?project=name\u\u\u\u项目,它应该尝试在简单数组中查找该项目 对于搜索,我的获取路径如下所示: studentsRouter.get("/", async (request, response) =&g

数据库:postgres

ORM:Typeorm

框架:express.js

我有一个表,其中一个名为
projects
的字段是字符串数组。在迁移中,类型设置为
“varchar”
,反装饰器设置为
“simple array”

在我的获取路径中,如果我收到一个查询
?project=name\u\u\u\u项目
,它应该尝试在简单数组中查找该项目

对于搜索,我的获取路径如下所示:

studentsRouter.get("/", async (request, response) => {
    const { project } = request.query;
    const studentRepository = getCustomRepository(StudentRepository);
    const students = project
        ? await studentRepository
                .createQueryBuilder("students")
                .where(":project = ANY (students.projects)", { project: project })
                .getMany()
        : await studentRepository.find();
    // const students = await studentRepository.find();
    return response.json(students);
}); 
问题是我得到了一个错误,认为右边应该是数组

(node:38971) UnhandledPromiseRejectionWarning: QueryFailedError: op ANY/ALL (array) requires array on right side
    at new QueryFailedError (/Users/Wblech/Desktop/42_vaga/src/error/QueryFailedError.ts:9:9)
    at Query.callback (/Users/Wblech/Desktop/42_vaga/src/driver/postgres/PostgresQueryRunner.ts:178:30)
    at Query.handleError (/Users/Wblech/Desktop/42_vaga/node_modules/pg/lib/query.js:146:19)
    at Connection.connectedErrorMessageHandler (/Users/Wblech/Desktop/42_vaga/node_modules/pg/lib/client.js:233:17)
    at Connection.emit (events.js:200:13)
    at /Users/Wblech/Desktop/42_vaga/node_modules/pg/lib/connection.js:109:10
    at Parser.parse (/Users/Wblech/Desktop/42_vaga/node_modules/pg-protocol/src/parser.ts:102:9)
    at Socket.<anonymous> (/Users/Wblech/Desktop/42_vaga/node_modules/pg-protocol/src/index.ts:7:48)
    at Socket.emit (events.js:200:13)
    at addChunk (_stream_readable.js:294:12)
(node:38971) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:38971) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
编辑-01

在文档中,我发现
简单数组
存储由逗号分隔的字符串。我想这意味着它是一个由逗号分隔的字符串。在本例中,是否有方法在“项目”字段中查找具有字符串的行

链接-

编辑02

字段项目存储学生正在做的项目,因此数据库返回以下json:

  {
    "id": "e586d1d8-ec03-4d29-a823-375068de23aa",
    "name": "First Lastname",
    "intra_id": "flastname",
    "projects": [
      "42cursus_libft",
      "42cursus_get-next-line",
      "42cursus_ft-printf"
    ]
  },

根据对问题的评论和更新,@WincentyBertoniLech确定ORM将
项目
数组作为逗号分隔的文本值存储在
students.projects
列中

我们可以使用
string\u to\u array()
将其转换为适当的
标准,其中
标准:

.where(":project = ANY ( string_to_array(students.projects, ','))", { project: project })

看起来,
projects
列应该有数据类型
varchar[]
(或
text[]
),而不仅仅是
varchar
@GMB,我尝试了这个,得到了相同的错误。
projects
中实际存储了什么?你能提供一个例子吗?你能直接查询数据库吗?ORM生成的内容没有帮助,因为它是格式化的。有一个函数您可以尝试:
。其中(“:project=ANY(string_to_array(students.projects,,)”,{project:project})
您可能需要根据ORM使用的内容调整分隔符。@MikeOrganek,成功了!请给我一个答案,这样我可以检查一下。
  {
    "id": "e586d1d8-ec03-4d29-a823-375068de23aa",
    "name": "First Lastname",
    "intra_id": "flastname",
    "projects": [
      "42cursus_libft",
      "42cursus_get-next-line",
      "42cursus_ft-printf"
    ]
  },
.where(":project = ANY ( string_to_array(students.projects, ','))", { project: project })