Parse-server: object.relation(..) throws "Invalid key '...'" when beforeFind() trigger change the query

Created on 15 Mar 2021  路  7Comments  路  Source: parse-community/parse-server

New Issue Checklist

Issue Description


Hi !

I have a beforeFind trigger that add a few restrictions on a child type, when executing parent.query().find() the server throw a Invalid key "$relatedTo"

Steps to reproduce

I have a Parent with a relation to a Child

Then:

// /cloud/index.js
  Parse.Cloud.beforeFind("Child", (req) => {
      const a = new Parse.Query("Child")
      const b = new Parse.Query("Child")

      a.equalTo('field', 'abcd')
      b.doesNotExist('field')

      return Parse.Query.and(req.query, Parse.Query.or(a, b)  )
})   

On the client

// client
const parent = new Parent()

await parent.relation('childs').query().find()

Actual Outcome

Error in mounted hook (Promise/async): "ParseError: 105 Invalid key name: $relatedTo"

Expected Outcome


An happy relation! 馃應

Failing Test Case / Pull Request

It seems that reduceRelationKeys only checks for a Top level $or, and in my case, the top level operator is $and

This seems like it 'fixes' the issue :

  reduceRelationKeys(className, query, queryOptions) {
//    if (query['$or']) {
//      return Promise.all(query['$or'].map(aQuery => {
//        return this.reduceRelationKeys(className, aQuery, queryOptions);
//      }));
//    }
    for(const op of ['$or', '$and' , '$not']) {
      if (query[op]) {
        return Promise.all(query[op].map(aQuery => {
          return this.reduceRelationKeys(className, aQuery, queryOptions);
        }));
      }
    }
// ....
  • [ ] 馃ぉ I submitted a PR with a fix and a test case.
  • [ ] 馃 I submitted a PR with a failing test case.

Environment

Server

  • Parse Server version: 4.5.0
  • Operating system: windows
  • Local or remote host (AWS, Azure, Google Cloud, Heroku, Digital Ocean, etc): local

Database

  • System (MongoDB or Postgres): mongo
  • Database version: 4.4?
  • Local or remote host (MongoDB Atlas, mLab, AWS, Azure, Google Cloud, etc): local

Client

  • SDK (iOS, Android, JavaScript, PHP, Unity, etc): js
  • SDK version: 3.1.0

Logs

needs more info

All 7 comments

Thanks for the PR and investigation. Would you be willed to send a PR with the fix and a regression test case?

@davimacedo It may take a few days, but Yeah sure! If you confirm that the proposed solution above will not break everything :) I'm just smashing the keyboard until something works 馃檲 馃槄

Thanks @sadortun . If all tests continue passing, it will probably not break anything. It is important to also add a new regression test case covering the problem you are trying to fix and maybe other tests to check potential problems you may think about.

@davimacedo @dplewis off topic question :) would it be possible that you add some information about the release cycles in the readme ? It would be really nice to have at least a patch release every month

@sadortun Parse Server currently does not have release cycles, but it is something we are looking into, see this discussion.

Hey @davimacedo should I iterate only over and, or, not or on all the special QueryKeys?

I believe only over and, or, not

Was this page helpful?
0 / 5 - 0 ratings