代码之家  ›  专栏  ›  技术社区  ›  user2263572

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

  •  1
  • user2263572  · 技术社区  · 7 年前

    编写一个select查询,返回state等于“florida”的所有行。

    实体列:

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

    示例列值:

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

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

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

    1 回复  |  直到 7 年前
        1
  •  11
  •   user2263572    7 年前

    开始工作了。

    正确的语法:

    .where(`user.address ::jsonb @> \'{"state":"${query.location}"}\'`)
    
        2
  •  0
  •   Henri Kellock    5 年前

    .where('user.address ::jsonb @> :address', {
        address: {
            state: query.location
        }
    })
    

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

    WHERE user.address ::jsonb @> $1
    

    { state: 'florida' }
    

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

        3
  •  0
  •   Ivan Proskuryakov    5 年前
        return getRepository(User)
        .createQueryBuilder()
        .where('address @> : address', {
          address: {
            state: "florida",
          },
        })
        .getMany();