SequelizeDatabaseError:运算符不存在:字符变化 [] @> 字符变化

Posted

技术标签:

【中文标题】SequelizeDatabaseError:运算符不存在:字符变化 [] @> 字符变化【英文标题】:SequelizeDatabaseError: operator does not exist: character varying[] @> character varying 【发布时间】:2017-06-23 04:38:45 【问题描述】:

当我尝试在数组数组中搜索一个数组值时出现上述错误。我的代码:

    sequelize.define('room', 
    'id' : 'type' : DataTypes.INTEGER, 'primaryKey' : true, 'autoIncrement' : true,
    'tutor' : 'type' : DataTypes.INTEGER, 'allowNull' : false,
    'students' : 'type' : DataTypes.ARRAY(DataTypes.STRING), 'allowNull' : false,
    'subject' : DataTypes.STRING,
    'date_time' : DataTypes.DATE,
    'status' : 'type' : DataTypes.STRING , 'defaultValue' : "active",
  
)

var queryString = "Select * from rooms where status = :statusVar and students @> ANY(:stuArray::character varying[]) ORDER BY CASE when :orderingVar = 'date_time DESC' then date_time end DESC, case when :orderingVar = 'date_time' THEN date_time end ASC OFFSET :offsetNumber LIMIT :limitNumber;"

    return sequelize.query(queryString, 
                      replacements: 
                        statusVar: status,
                        orderingVar: orderVar, 
                        limitNumber: itemPerPage, 
                        offsetNumber: ((pageNumber-1)*itemPerPage),
                        tutArray: '' + tutorUserId.toString() +'',
                        stuArray: ['' + studName.toString() + '']
                      , 
                        type: sequelize.QueryTypes.SELECT)

其中 studName = [艾米丽,约翰,德克斯特];

我想查找“学生”列包含任何学生姓名的所有记录,即 Emily 或 John 或 Dexter

【问题讨论】:

【参考方案1】:

我最终做了以下事情并且成功了

var queryString = "Select * from rooms where students && :stuArray::varchar[] and status = :statusVar ORDER BY CASE when :orderingVar = 'date_time DESC' then date_time end DESC, case when :orderingVar = 'date_time' THEN date_time end ASC OFFSET :offsetNumber LIMIT :limitNumber;"

'&&' 是重叠(具有共同元素)运算符 例如:ARRAY[1,4,3] && ARRAY[2,1] 返回 true。请注意,运算符的右侧也应该是这种格式的数组stuArray: ['' + studName.toString() + ''],即['Emily, John, Dexter']

【讨论】:

以上是关于SequelizeDatabaseError:运算符不存在:字符变化 [] @> 字符变化的主要内容,如果未能解决你的问题,请参考以下文章

获取 DatabaseError [SequelizeDatabaseError],不正确的整数值

SequelizeDatabaseError:无法截断外键约束中引用的表

收到以下错误:“SequelizeDatabaseError 列“createdAt”不存在”

未处理的拒绝 SequelizeDatabaseError:无法添加外键约束

未处理的拒绝 SequelizeDatabaseError: 未选择数据库

Postgres SequelizeDatabaseError:返回或接近返回的语法错误