Использование bookshelf.js для запроса столбца JSON в базе данных PostgreSQL - PullRequest
0 голосов
/ 19 октября 2018

У меня есть столбец в таблице users моей таблицы Postgres dB с именем email_subscription_prefs, в котором хранится некоторая информация в формате JSON.Длина массива равна 1.

Пример данных: [{"marketing":true,"transactional":true,"collaboration":true,"legal":true,"account":true}]

Проблема: Я пытаюсь использовать bookshelf.js ORM для запросаи искать все записи в этой таблице, основываясь на значении ключа marketing, особенно когда его значение равно true.

Вот отредактированный фрагмент моего кода, показывающий, что я пытаюсь реализовать этот запросиспользование bookshelf.js:

return new User()
   qb.where(function() {
     this.where('domicile', 'USA').orWhere('domicile', null)
   })
   qb.whereRaw('cast(email_subscription_prefs->>? as boolean) = ?', ['marketing', true])
   qb.limit(100)
  })

Может кто-нибудь сказать мне, что я делаю неправильно в выражении qb.whereRaw, где я пытаюсь запросить столбец JSON email_subscription_prefs?

код ничего не возвращает, если в таблице users есть несколько тысяч записей.

Заранее спасибо.

1 Ответ

0 голосов
/ 21 октября 2018

У вас, кажется, есть массив объектов в данных примера вместо одного объекта json.

[
  {
    "marketing":true,
    "transactional":true,
    "collaboration":true,
    "legal":true,
    "account":true
  }
]

, похоже, вы пытаетесь сослаться на email_subscription_prefs->>'marketing', который не найден в массиве.

Чтобы получить marketing атрибут первого элемента в массиве, который вы должны сделать:

email_subscription_prefs->0->>'marketing'

Если это не проблема, вам нужно добавить некоторые примеры данных из вашей БД вбыть в состоянии сказать, в чем проблема.Ваше текущее описание недостаточно хорошо описывает запрашиваемую таблицу.

...