sequelize: найти в массиве json - PullRequest
0 голосов
/ 25 июня 2018

В дальнейшем у меня есть модель:

{
   modelId: {
      type:  DataTypes.UUID ,
      allowNull: false,
      primaryKey: true,
      defaultValue: DataTypes.UUIDV4 
    }
   name: DataTypes.STRING(1024),
   type: DataTypes.STRING,
   obj: DataTypes.JSON
}

и в БД, мой объект является массивом, подобным этому:

[{
   id: '123456',
   text: 'test',
   name 'xpto'
},{
   id: '32554',
   text: 'test2',
   name 'xpte'
},{
   id: '36201',
   text: 'test3',
   name 'xpta'
}]

я попробовал это:

btp.findAll({
        where: {
          obj:{
             [Op.contains]:[{id: req.body.id}]
          }
        },
        attributes: ['modelId','name','type','obj']
      })

но не работает, верните эту ошибку:

{"name": "SequelizeDatabaseError",
"parent": {
    "name": "error",
    "length": 128,
    "severity": "ERROR",
    "code": "42704",
    "file": "parse_coerce.c",
    "line": "1832",
    "routine": "enforce_generic_type_consistency",
     "sql":"....."}

, поэтому мне нужно найти в базе данных все записи в obj, id: '123456'

мой вопросто же самое: https://github.com/sequelize/sequelize/issues/7349

но это не работает для меня, мне нужно вернуть все записи, которые содержат ... Я использую "sequelize": "4.28.6" и "pg-hstore ":" ^ 2.3.2 ",

Может ли кто-нибудь помочь?

1 Ответ

0 голосов
/ 06 июня 2019

Я не знаком с конкретной ошибкой, которую вы получаете, но одна потенциальная проблема заключается в том, что вы используете столбец JSON вместо JSONB.В Postgres столбцы JSON просто хранят необработанный текст JSON, и поэтому не поддерживает оператор сдерживания (@>), который необходим для "содержащего" Sequelize.

Все, что вам нужноЧтобы исправить это, измените определение столбца в модели на:

obj: DataTypes.JSONB

Единственная другая проблема, о которой я могу подумать, это req.body.id с недопустимым значением.Я бы посоветовал проверить, что он действительно получает действительную строку идентификатора.

Помимо этих двух потенциальных проблем, написанный вами запрос должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...