如何在BookshelfJS中的Query中使用ID?

时间:2018-03-29 11:57:29

标签: node.js knex.js bookshelf.js

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

void Foo(string path){
    try{
        XDocument document = XDocument.Load(path);
        Validate(document);
        //Some logic
    }
    catch(Exception ex){
        //Some logic
    }
}
void Validate(XDocument document){
     XmlSchemaSet schema = new XmlSchemaSet();
     schema.Add("", XmlReader.Create(new StringReader("XsdFile")));
     document.Validate(schema, null);
}

===>当我使用 KNEX 时,会出现类似错误,

.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)
  });
});
  1. student_id 栏中我有这样的ID, 33,34,35,36
  2. req.params.id 中我只有一个ID,如35。
  3. 所以我想要,其中包含35个ID,在同一个表中。
  4. enter image description here

    ===> 所以我只想要两排(2,3)因为它包含ID = 35。

1 个答案:

答案 0 :(得分:1)

假设您正在使用PostgreSQL数据库(我在屏幕截图中看到您使用phpPgAdmin)。您可以使用regexp_split_to_array函数将字符串转换为数组(显然:)。并使用任何。

对结果数组执行搜索

在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_id存储在数组类型中并在student_id列上添加gin索引并执行this

等搜索操作
select * from table where student_id @> '{35}';