kysely
    Preparing search index...

    Class JSONPathBuilder<S, O>

    Type Parameters

    • S
    • O = S

    Hierarchy (View Summary)

    Index

    Constructors

    Methods

    Constructors

    Methods

    • Access an element of a JSON array in a specific location.

      Since there's no guarantee an element exists in the given array location, the resulting type is always nullable. If you're sure the element exists, you should use SelectQueryBuilder.$assertType to narrow the type safely.

      See also key to access properties of JSON objects.

      await db.selectFrom('person')
      .select(eb =>
      eb.ref('nicknames', '->').at(0).as('primary_nickname')
      )
      .execute()

      The generated SQL (PostgreSQL):

      select "nicknames"->0 as "primary_nickname" from "person"
      

      Combined with key:

      db.selectFrom('person').select(eb =>
      eb.ref('experience', '->').at(0).key('role').as('first_role')
      )

      The generated SQL (PostgreSQL):

      select "experience"->0->'role' as "first_role" from "person"
      

      You can use 'last' to access the last element of the array in MySQL:

      db.selectFrom('person').select(eb =>
      eb.ref('nicknames', '->$').at('last').as('last_nickname')
      )

      The generated SQL (MySQL):

      select `nicknames`->'$[last]' as `last_nickname` from `person`
      

      Or '#-1' in SQLite:

      db.selectFrom('person').select(eb =>
      eb.ref('nicknames', '->>$').at('#-1').as('last_nickname')
      )

      The generated SQL (SQLite):

      select "nicknames"->>'$[#-1]' as `last_nickname` from `person`
      

      Type Parameters

      • I extends number | "last" | `#-${number}`
      • O2 = null | NonNullable<NonNullable<O>[keyof NonNullable<O> & number]>

      Parameters

      • index: `${I}` extends `${any}.${any}` | `#--${any}` ? never : I

      Returns TraversedJSONPathBuilder<S, O2>

    • Access a property of a JSON object.

      If a field is optional, the resulting type will be nullable.

      See also at to access elements of JSON arrays.

      db.selectFrom('person').select(eb =>
      eb.ref('address', '->').key('city').as('city')
      )

      The generated SQL (PostgreSQL):

      select "address"->'city' as "city" from "person"
      

      Going deeper:

      db.selectFrom('person').select(eb =>
      eb.ref('profile', '->$').key('website').key('url').as('website_url')
      )

      The generated SQL (MySQL):

      select `profile`->'$.website.url' as `website_url` from `person`
      

      Combined with at:

      db.selectFrom('person').select(eb =>
      eb.ref('profile', '->').key('addresses').at(0).key('city').as('city')
      )

      The generated SQL (PostgreSQL):

      select "profile"->'addresses'->0->'city' as "city" from "person"
      

      Type Parameters

      • K extends string
      • O2 = undefined extends O
            ? null
            | NonNullable<NonNullable<O>[K]>
            : null extends O
                ? NonNullable<NonNullable<O>[K]>
                | null
                : string extends keyof NonNullable<O>
                    ? null | NonNullable<NonNullable<O>[K]>
                    : NonNullable<O>[K]

      Parameters

      • key: K

      Returns TraversedJSONPathBuilder<S, O2>