簡體   English   中英

Sequelize - 在 PostgreSQL 數組查詢中不包含字符串

[英]Sequelize - does not contain a string within a PostgreSQL array query

我有一個名為Staff的 Sequelize 模型。 上面有一個數組字段,描述如下:

const Staff = sequelize.define("staff", {
    name: {
        type: DataTypes.STRING,
    },
    email: {
        type: DataTypes.STRING,
        unique: true
    },
    password: {
        type: DataTypes.STRING,
    },
    roles: {
        type: DataTypes.ARRAY(DataTypes.STRING)
    },
});

我正在嘗試創建一個 GraphQL 端點,該端點為所有在其roles字段中沒有“講師”的員工提供服務。

我已經閱讀了文檔的這個頁面,建議我使用Sequelize.Op的組合。 所以我創建了這個:

return Staff.findAll({
        where: {
            roles: {
                [Sequelize.Op.not]: {[Sequelize.Op.contains]: ['instructor']},
            }
        }
    }
)

以上拋出錯誤:

"message": "values.map is not a function"

但是,如果我要嘗試一個不是組合的查詢,例如:

return models.Staff.findAll({
        where: {
            roles: {
                [Sequelize.Op.contains]: ['instructor']
            }
        }
    }
)

查詢運行正常,這讓我相信我可能對Op邏輯的組合方式有語法錯誤或誤解。

嘗試這個:

return models.Staff.findAll({
  where: {
    $not: {
      roles: {
        $contains: ['instructor'],
      },
    },
  },
})

子句$not不需要在您定位的列之前。

這對我來說很好用:

return models.Staff.findAll({
   where: {
    [Sequelize.Op.not]: {
      roles: {
       [Sequelize.Op.contains]: ['instructor'],
      },
    },
  },
})

Sequelize.Op.not不必出現在被Sequelize.Op.not的列之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM