Sequelize: запрос, если ARRAY содержит значение

94
16

Предположим, у меня есть поле PG ARRAY:

id |    array    |
===|=============|
1|{"1","2","3"}|

Как использовать sequelize для запроса, чтобы увидеть, является ли поле массива значением 1.

Я пытался:

array: { $contains: "1" }

который дает мне:

array @> "1"

с ошибкой:

Possibly unhandled SequelizeDatabaseError: array value must start with "{" or dimension information

ОБНОВИТЬ

Я смог сделать это с помощью: array: {$ contains: '{' + value + '}'}

Есть ли более правильный путь?

спросил(а) 2015-03-13T18:38:00+03:00 5 лет, 7 месяцев назад
1
Решение
177

Я понял, что sequelize ожидает, что условие будет массивом:

array: { [Op.contains]: ["1"] }

Это будет работать. Ура !!

Имейте в виду, что Op экспортируется из sequelize

const { Op } = require('sequelize');

ответил(а) 2015-03-14T11:35:00+03:00 5 лет, 7 месяцев назад
58

проклятый человек и спас мою жизнь, сломал мне мозг в течение 3 дней! <3 btw. Знаете ли вы, как я мог немного изменить его? Вот как он выглядит для меня

 if(!hook.params.query) {
hook.params.query = {}
} else {
hook.params.query = {
creatorId: '' + hook.params.user.id,
participants: {
$contains: [(''+hook.params.user.id)]
}
}
}

это возвращает все объекты, которые имеют creatorId, который соответствует идентификатору пользователя и участникам, которые его содержат. Вы знаете, как я могу включить ИЛИ вместо И? если creatorID соответствует OR, если участники его содержат. Потому что это не возвращает объекты, которые не выполняют оба условия?

ответил(а) 2017-11-06T01:04:00+03:00 2 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема