Javascript Sequelize:查找匹配项包含的所有内容(不区分大小写)

Javascript Sequelize:查找匹配项包含的所有内容(不区分大小写),javascript,sequelize.js,Javascript,Sequelize.js,我想使用sequelize.js查询模型中包含约束的记录。我该怎么做 这就是我现在拥有的: Assets .findAll({ limit: 10, where: ["asset_name like ?", '%' + request.body.query + '%'] }) .then(function(assets){ return response.json({ msg: 'search results', assets: assets })

我想使用sequelize.js查询模型中包含约束的记录。我该怎么做

这就是我现在拥有的:

Assets
  .findAll({ limit: 10, where: ["asset_name like ?", '%' + request.body.query + '%'] })
  .then(function(assets){
    return response.json({
      msg: 'search results',
      assets: assets
    });
  })
  .catch(function(error){
    console.log(error);
  });
但我得到了以下错误:

   { error: operator does not exist: character varying @> unknown
       at Connection.parseE (/home/travellr/safe-star.com/SafeStar/node_modules/pg/lib/connection.js:554:11)
       at Connection.parseMessage (/home/travellr/safe-star.com/SafeStar/node_modules/pg/lib/connection.js:381:17)
       at Socket.<anonymous> (/home/travellr/safe-star.com/SafeStar/node_modules/pg/lib/connection.js:117:22)
       at emitOne (events.js:96:13)
       at Socket.emit (events.js:188:7)
       at readableAddChunk (_stream_readable.js:176:18)
       at Socket.Readable.push (_stream_readable.js:134:10)
       at TCP.onread (net.js:548:20)
     name: 'error',
     length: 209,
     severity: 'ERROR',
     code: '42883',
     detail: undefined,
     hint: 'No operator matches the given name and argument type(s). You might need to add explicit type casts.',
     position: '246',
     internalPosition: undefined,
     internalQuery: undefined,
     where: undefined,
     schema: undefined,
     table: undefined,
     column: undefined,
     dataType: undefined,
     constraint: undefined,
     file: 'parse_oper.c',
     line: '722',
     routine: 'op_error',
     sql: 'SELECT "id", "asset_name", "asset_code", "asset_icon", "asset_background", "asset_add_view", "asset_add_script", "asset_add_id_regex", "date_created", "uniqueValue", "createdAt", "updatedAt" FROM "assets" AS "assets" WHERE "assets"."asset_name" @> \'%a%\' LIMIT 10;' },
  sql: 'SELECT "id", "asset_name", "asset_code", "asset_icon", "asset_background", "asset_add_view", "asset_add_script", "asset_add_id_regex", "date_created", "uniqueValue", "createdAt", "updatedAt" FROM "assets" AS "assets" WHERE "assets"."asset_name" @> \'%a%\' LIMIT 10;' }
{错误:运算符不存在:字符变化@>未知
在Connection.parseE(/home/travellr/safe star.com/SafeStar/node_modules/pg/lib/Connection.js:554:11)
在Connection.parseMessage(/home/travellr/safe star.com/SafeStar/node_modules/pg/lib/Connection.js:381:17)
在插座上。(/home/travellr/safe star.com/SafeStar/node_modules/pg/lib/connection.js:117:22)
在emitOne(events.js:96:13)
在Socket.emit(events.js:188:7)
在readableAddChunk(_stream_readable.js:176:18)
在Socket.Readable.push(_stream_Readable.js:134:10)
在TCP.onread(net.js:548:20)
名称:“错误”,
长度:209,
严重性:“错误”,
代码:“42883”,
细节:未定义,
提示:“没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。”,
位置:'246',
内部位置:未定义,
internalQuery:未定义,
其中:未定义,
模式:未定义,
表:未定义,
列:未定义,
数据类型:未定义,
约束:未定义,
文件:“parse_oper.c”,
行:“722”,
例行程序:“操作错误”,
sql:“从“资产”中选择“id”、“资产名称”、“资产代码”、“资产图标”、“资产背景”、“资产添加视图”、“资产添加脚本”、“资产添加id”正则表达式、“创建日期”、“唯一值”、“创建日期”、“更新日期”作为“资产”,其中“资产”。“资产名称”@>\'%a%\'限制10;”,
sql:“从“资产”中选择“id”、“资产名称”、“资产代码”、“资产图标”、“资产背景”、“资产添加视图”、“资产添加脚本”、“资产添加id”正则表达式、“创建日期”、“唯一值”、“创建日期”、“更新日期”作为“资产”,其中“资产”。“资产名称”@>\'%a%\'限制10;”
如何在sequelize中使用包含查询

Assets.findAll({
        limit: 10,
        where: {
            asset_name: {
                [Op.like]: '%' + request.body.query + '%'
            }
        }
}).then(function(assets){
    return response.json({
        msg: 'search results',
        assets: assets
    });
}).catch(function(error){
    console.log(error);
});
编辑

为了使其不区分大小写,您可以使用
LOWER
sql函数,但之前您还必须将
request.body.query
值的大小写降低。Sequelize查询将是这样的

let lookupValue = request.body.query.toLowerCase();

Assets.findAll({
    limit: 10,
    where: {
        asset_name: sequelize.where(sequelize.fn('LOWER', sequelize.col('asset_name')), 'LIKE', '%' + lookupValue + '%')
    }
}).then(function(assets){
    return response.json({
        msg: 'message',
        assets: assets
    });
}).catch(function(error){
    console.log(error);
});
它所做的是将表中的
asset\u name
值小写,并将
request.body.query
值小写。在这种情况下,比较两个小写字符串

为了更好地理解在这种情况下发生了什么,我建议您查看sequelize文档中有关的以及。这些函数在尝试执行一些异常查询时非常有用,而不是简单的
findAll
findOne


本例中的
sequelize
当然是您的sequelize实例。

如果您在Postgres中使用sequelize,最好使用
[Op.iLike]:`%${request.body.query}%`
并且您可以忘记sequelize函数。

我已经更新了答案,现在应该不区分大小写。如果您使用的是PG,您可以使用
[Op.iLike]:`%${request.body.query}%`
跳过小写的cruft.hi@piotrbienias,当我想检查资产名称是否与以下字符串之一匹配时,我该怎么做:'bac'、'rgr'、'afg'、'rtt'。类似这样的内容:if(asset_name.match(/(bac)|(rgr)|(afg)|(rtt)/)获取它。嘿,我一定会尝试的!不幸的是,[Op.iLike]只有在使用Postgres时才有效