Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JSON Schema $or querySyntax should allow additional properties #3550

Open
ha6755ad opened this issue Nov 12, 2024 · 1 comment
Open

JSON Schema $or querySyntax should allow additional properties #3550

ha6755ad opened this issue Nov 12, 2024 · 1 comment

Comments

@ha6755ad
Copy link

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.

@EmileSpecs
Copy link

EmileSpecs commented Nov 14, 2024

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
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants