Node.js 如何在BookshelfFJS查询中使用ID?

Node.js 如何在BookshelfFJS查询中使用ID?,node.js,knex.js,bookshelf.js,Node.js,Knex.js,Bookshelf.js,我有一个字段&它有逗号分隔的ID,所以我想从所选ID中查找,这是我的代码 .get(function(req, res) { knex.select('*') .from('exam') .whereRaw('? = any(regexp_split_to_array(student_id))', [req.params.id]) .then(function(rows) { //return res.send(rows); console.log(rows);

我有一个字段&它有逗号分隔的ID,所以我想从所选ID中查找,这是我的代码

.get(function(req, res) {
  knex.select('*')
  .from('exam')
  .whereRaw('? = any(regexp_split_to_array(student_id))', [req.params.id])
  .then(function(rows) {
    //return res.send(rows);
    console.log(rows);
  })
  .catch(function(error) {
    console.log(error)
  });
});
==>当我使用KNEX时,它会给出这样一个错误

{ error: function regexp_split_to_array(text) does not exist
  name: 'error',
  length: 220,
  severity: 'ERROR',
  code: '42883',
  detail: undefined,
  hint: 'No function matches the given name and argument types. You might need to add explicit type casts.',
  position: '37',
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'parse_func.c',
  line: '523',
  routine: 'ParseFuncOrColumn' 
}
  • 学生id栏中,我有这样的id,33,34,35,36
  • 在请求参数id中,我只得到了一个id,比如35
  • 所以我想要在同一个表中包含35个ID的

  • ==>所以我只想要两行(2,3),因为它包含ID=35。假设您使用的是PostgreSQL数据库(我在屏幕截图上看到您使用的是phpPgAdmin)。您可以使用函数将字符串转换为数组(显然:)。并使用任意值对结果数组执行搜索

    用SQL的话来说,它可以这样写

    select '35' = any(regexp_split_to_array('33,34,35,36', E','));
    
    在查询中,可以将
    。where
    替换为

    .whereRaw("? = any(regexp_split_to_array(student_id, E','))", [req.params.id])
    
    但请记住,对于执行字符串拆分操作的每一行来说,这可能是一个高性能的请求。一种更好的方法(假设您的项目需要在一行中包含数组值)是将
    student\u id
    存储在数组类型中,并在
    student\u id
    列上添加索引,然后执行如下搜索操作


    假设您使用的是PostgreSQL数据库(我在屏幕截图上看到您使用的是phpPgAdmin)。您可以使用函数将字符串转换为数组(显然:)。并使用任意值对结果数组执行搜索

    用SQL的话来说,它可以这样写

    select '35' = any(regexp_split_to_array('33,34,35,36', E','));
    
    在查询中,可以将
    。where
    替换为

    .whereRaw("? = any(regexp_split_to_array(student_id, E','))", [req.params.id])
    
    但请记住,对于执行字符串拆分操作的每一行来说,这可能是一个高性能的请求。一种更好的方法(假设您的项目需要在一行中包含数组值)是将
    student\u id
    存储在数组类型中,并在
    student\u id
    列上添加索引,然后执行如下搜索操作



    Knex只创建SQL查询并将其发送给SQL。SQL本身无法在“逗号分隔”字符串中进行本机搜索。您可以搜索像“%35%”这样的学生id,但这将是一个昂贵的操作(如果您有很多行),而且它还将查找包含35的id,如135。也许您可以使用一些特殊的SQL命令,这些命令可以使用逗号。@libik是的,使用LIKE如果任何其他列具有354 ID,那么它也将获取该行,但我只需要具有35 ID的行。那么可能是这样的吗?如果在同一列中存储多个ID,则使用了错误的关系类型。您可能应该改用
    belongTomany
    。@devius这与关系无关,我希望数据来自同一个表,而不是引用表。Knex只创建SQL查询并将其发送给SQL。SQL本身无法在“逗号分隔”字符串中进行本机搜索。您可以搜索像“%35%”这样的学生id,但这将是一个昂贵的操作(如果您有很多行),而且它还将查找包含35的id,如135。也许您可以使用一些特殊的SQL命令,这些命令可以使用逗号。@libik是的,使用LIKE如果任何其他列具有354 ID,那么它也将获取该行,但我只需要具有35 ID的行。那么可能是这样的吗?如果在同一列中存储多个ID,则使用了错误的关系类型。您可能应该改用
    belongTomany
    。@devius这与关系无关,我想从同一个表中获取数据,而不是从引用表中获取数据。我得到的错误是“Exam.whereRaw不是函数”,实际上我使用的是BookshelfJS,那么我如何在BookshelfJS中使用此查询呢?@Chaudhary好的,试试这个
    。where(bookshelf.knex.raw(')?=any(regexp_split_to_array(student_id)),[req.params.id]))
    我实际上不熟悉BookshelfFJ,但使用
    knex
    工具它应该可以工作。我更新我的问题,当我使用knex时,它会给出一个错误。很抱歉,我错过了
    knex
    表示、
    、E'、“
    regexp\u split\u to\u数组
    的第二个参数。我将更新我的responseCookoo===>thanxxxx现在它工作正常了,thanxx。我得到了这个错误“Exam.whereRaw不是函数”,实际上我使用的是BookshelfFJS,那么如何在BookshelfFJS中使用这个查询呢?@Chaudhary好的,试试这个
    。where(bookshelf.knex.raw('?=any(regexp\u split\u to\u array(student\u id)),[req.params.id]))
    我实际上不熟悉BookshelfFJ,但使用
    knex
    工具它应该可以工作。我更新我的问题,当我使用knex时,它会给出一个错误。很抱歉,我错过了
    knex
    表示、
    、E'、“
    regexp\u split\u to\u数组
    的第二个参数。我将更新我的responseCookoo===>thanx现在它工作得很好,thanxx。