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"
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()
Error in mounted hook (Promise/async): "ParseError: 105 Invalid key name: $relatedTo"
An happy relation! 馃應
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);
}));
}
}
// ....
Server
4.5.0windowslocalDatabase
mongo4.4?localClient
js3.1.0Thanks 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