代码之家  ›  专栏  ›  技术社区  ›  skinneejoe

ArangoDB动态AQL字符串处理程序

  •  1
  • skinneejoe  · 技术社区  · 7 年前

    let sortExpression = sortByDate ? 'SORT ${date}' : `SORT ${name}`
    
    const result = db._query(aql`
        FOR doc IN tickets
        ${sortExpression}
        RETURN doc
    `)
    

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

    2 回复  |  直到 7 年前
        1
  •  0
  •   Tom Regner    7 年前

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

    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
  •  0
  •   skinneejoe    7 年前

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