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'
})
同样,这对于上面的简单示例来说有点矫枉过正,但我的真实世界查询要复杂得多。
是否可以使用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'
})
同样,这对于上面的简单示例来说有点矫枉过正,但我的真实世界查询要复杂得多。