Skip to content

JSON Schema $or querySyntax should allow additional properties #3550

Open

Description

@ha6755ad

A common use-case would be I have a complex nested object in my schema and I want to run an $or query for 'some.nested.path': true

In order to do this I have to list 'some.nested.path' separately in my querySchema. I think for paths containing types like ObjectIds this makes sense because there is a data transformation taking place. However, for simple types like a boolean, string, number, etc. the query would run just fine if I simply changed my querySchema to additionalProperties: true.

Suggestion to make $or, $and, etc allow additional properties optionally as well.

Activity

  1. EmileSpecs commented on Nov 14, 2024

    @EmileSpecs

    Hi @ha6755ad

    Do I understand correctly though that you have gotten this to work?

    I can't get it to work, I get the error: "message: 'must NOT have additional properties'"

    I'm trying to query:

    query: {
    $or = [
          { reference: { $ilike: `%${search.value}%` } },
          { 'account.name': { $ilike: `%${search.value}%` } }
        ]
    }
    

    And my querySchema is defined:

    export const invoiceQuerySchema = Type.Intersect(
      [
        querySyntax(invoiceQueryProperties, {
          reference: {
            $ilike: Type.String()
          }
        }),
        // Add additional query properties here
        Type.Object({
          // Allow querying invoices by relations and specific context
          'account.name': queryProperty(Type.String(), {
            $ilike: Type.String()
          })
        }, { additionalProperties: false })
      ],
      { additionalProperties: false }
    )
    

    When I query 'account.name' outside of the $or it works fine, no error.
    Also using it inside the $or but commenting out the query validation hook also works.

    For me setting additionalProperties: true makes no difference, I still get the same error.

    So it's just a validation issue, it all works as expected.
    Can you provide an example of how you specified the relational query syntax?

    Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions