typeorm postgres选择json字段等于某个值的位置

时间:2018-10-15 00:29:45

标签: postgresql typeorm

目标:编写一个select查询,该查询返回状态等于“佛罗里达”的所有行。

实体列:

  @Column({ type: 'json'})
  public address: Address;

样本列值:

{"city": "miami", "state": "florida"}

查询示例(无效):

getManager().getRepository(User)
    .createQueryBuilder('user')
    .select()
    .where('user.address.state =:state', {state: "florida"})

typeorm当前是否支持此功能?如果是这样,我该如何修改where子句以返回正确的行?

4 个答案:

答案 0 :(得分:4)

使其正常工作。

正确的语法:

.where(`user.address ::jsonb @> \'{"state":"${query.location}"}\'`)

答案 1 :(得分:2)

另一种可能的解决方案(原始SQL无法与此注入):

WHERE user.address ::jsonb @> $1

这样,TypeORM将产生一个以结尾的SQL查询

{ state: 'florida' }

,查询将被给出

export enum IngridientType {
  BreadBottom = 'BreadBottom',
  BreadTop = 'BreadTop',
  Meat = 'Meat',
  Cheese = 'Cheese',
  Bacon = 'Bacon',
  Salad = 'Salad',
  Seeds1 = 'Seeds1',
  Seeds2 = 'Seeds2',
}

export type IngredientsListType<R> = Record<IngridientType, R>

type IBurgerBuilderState<T> = { ingredients: Partial<IngredientsListType<T>> }

export class BurgerBuilder extends Component<{}, IBurgerBuilderState<number>> {
  state = {
    ingredients: {
      [IngridientType.Bacon]: 2,
      [IngridientType.Cheese]: 2,
    },
  }
}

作为查询参数,以替换查询中的正确值($ 1)。

来源:主要是原始问题+答案(谢谢!)+自己的测试+ https://www.postgresql.org/docs/9.4/functions-json.html

答案 2 :(得分:1)

    return getRepository(User)
    .createQueryBuilder()
    .where('address @> :address', {
      address: { state: "florida" },
    })
    .getMany();

答案 3 :(得分:-2)

这对我有用。我只是使用 TypeORM 之类的函数。

.find({
   where: {
      address: Like(`%${add what to search for here}%`),
   },
});