ArangoDB 动态 AQL 字符串处理程序

ArangoDB Dynamic AQL String Handler

是否可以使用ArangoDB 中的aql 字符串处理程序来执行动态查询?我尝试了多种不同的方法,但总是出错。例如,我想做这样的事情:

let sortExpression = sortByDate ? 'SORT ${date}' : `SORT ${name}`

const result = db._query(aql`
    FOR doc IN tickets
    ${sortExpression}
    RETURN doc
`)

这个例子非常简单,但我有一个更复杂的情况,像这样的东西会非常方便。有没有办法让这样的东西起作用?

如果查询更复杂,并且我要嵌入真正的变量,我会像下面这样写:

let sortProp = sortByDate ? 'date' : 'name';

var query = aql`
    FOR doc IN tickets
       SORT @SORT_PROP@
       RETURN doc`;
query.query = query.query.replace('@SORT_PROP@', sortProp);
var result = db._query(query);

也许这也适用于您的用例。

在更仔细地研究了 aql 字符串处理程序的工作原理后,我发现我正在尝试做的事情对它来说是不可行的。所以我决定使用常规的 bind var 语法:

let sortExpression = 'SORT @sortField'

const result = db._query(`
    FOR doc IN @@coll
    ${sortExpression}
    RETURN doc
`, {
    '@coll': module.context.collectionName('tickets'),
    'sortField': sortByDate ? 'date' : 'name'
})

同样,这对于上面的简单示例来说有点矫枉过正,但我​​的真实世界查询要复杂得多。