【问题标题】:ArangoDB Dynamic AQL String HandlerArangoDB 动态 AQL 字符串处理程序
【发布时间】:2017-07-06 23:13:50
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: string dynamic arangodb aql


    【解决方案1】:

    如果查询更复杂,并且我有要嵌入的真实变量,我会这样写:

    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);
    

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

    【讨论】:

    • 谢谢汤姆,这对我的情况并不可行,但它让我朝着正确的方向前进。
    【解决方案2】:

    在仔细研究了 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'
    })
    

    同样,对于上面的简单示例来说,这太过分了,但我的真实世界查询要复杂得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多