как фильтровать строки таблицы в nodejs с помощью запросов к базе данных? - PullRequest
0 голосов
/ 29 мая 2020

Я использую nest js framework для моего демонстрационного приложения. В моем демонстрационном приложении у меня есть одно entity name: Category, которое имеет два столбца (id, description). описание тип jsonb

export class Category extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'jsonb' })
  description;
}

Я вставил некоторые данные в свою таблицу.

enter image description here Теперь я хочу отфильтровать эти данные и показывать только те строки, которые имеют name = test

, в настоящее время использование кода ниже дает мне все строки. но мне нужны только те строки, которые имеют name equals to test. в настоящее время есть только одна строка

@Get('/app')
  async getApp(): Promise<Category[]> {
    return this.categoryRepository.find({});
  }

вот мой код https://codesandbox.io/s/nest-nhqyb?file= / src / app.controller.ts: 568-670

вы можете увидеть результат фильтра, например

https://nhqyb-5000.sse.codesandbox.io/app

1 Ответ

0 голосов
/ 29 мая 2020

Согласно эта проблема , это невозможно, если вы не пишете необработанный SQL и не используете синтаксис c базы данных.

В Postgres это будет выглядеть примерно так

SELECT * 
FROM Category cat
WHERE EXISTS (
  SELECT FROM jsonb_each(cat.description) desc
   WHERE  desc.value->>'name' ILIKE 'test'
   );

Более подробное обсуждение и подробные ответы здесь

...