Building arangodb complex query with lots of AND fails

64 Views Asked by At

I'm trying to pass a map of key:value to arangodb query with AND checking if c.key == value AND c.key == value etc etc.

This is my code:

public async getCollectionsQuery(query: Record<any, any>): Promise<Record<any, any>[]> {
    const req = query["request"]
    const keys = Object.keys(req)
    if (keys.length) {
        let rules: string = "";
        for (const [key, value] of Object.entries(req)) {
            rules += "c." + key + " == \"" + value + "\" AND "
        }
        rules = rules.substring(0, rules.length - 5)
        let q = aql`
      FOR c IN ${this.mCollectionPtr}
        FILTER` + rules + `
        RETURN c
    `
        const cursor = await this.mDB.getDatabase().query(q)
        return await cursor.all();
    }
    return []
}

I get this error

ArangoError: AQL: syntax error, unexpected [ near '[object Object]c.name == "d2382b...' at position 1:1 (while parsing)

For example a simple query key:value like this works just fine :

public async getCollectionItemsByValue(key: string, value: string): Promise<Record<any, any>> {
    let q = aql`
      FOR c IN ${this.mCollectionPtr}
        FILTER c.${key} == ${value}
        RETURN c
    `
    const cursor = await this.mDB.getDatabase().query(q)
    return await cursor.all();
}

Can anyone suggest a way to fix this?

0

There are 0 best solutions below