使用ES6文字模板的动态AQL查询

时间:2018-10-18 12:17:30

标签: templates ecmascript-6 arangodb aql

我想在Foxx中动态生成查询。 filter语句是否存在取决于请求参数。例如

//Conditionally determine if we should include a filter statement here or not
var var1=true;
getAllEntitiesThatSatisfyTheCondition = db._query(aql `
      For u In ${EntityCollection}
      ${var1 ? `Filter u.prop == ${var1}`:``}
      Return DISTINCT u._id
    `).toArray();

这将返回有关绑定值的错误

syntax error, unexpected bind parameter

如何在arango中使用文字模板以这种方式构造查询,还是必须使用查询生成器?

2 个答案:

答案 0 :(得分:1)

这在使用Arango 3.3.16的Foxx上对我有效:

var test = "1124852" 
const filter = aql.literal(
    test ? `AND v._key == "${test}" ` : ''
  );

然后在您的查询中只需添加

${filter}

答案 1 :(得分:0)

您也可以像下面一样使用它。

var filter = "FILTER a.name=='test'";


var query = `
   for a IN collection1
  "${filter}"
 limit 50
  return a
`;

db._query(query).toArray();

此处javascript过滤器变量将被动态替换。希望这会有所帮助。