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

Dynamic AQL query with ES6 literal template

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

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

这个会return关于绑定值的错误

syntax error, unexpected bind parameter

如何在 arango 中以这种方式使用文字模板构建查询,或者我必须使用查询构建器?

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

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

然后在您的查询中添加

${filter}

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

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


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

db._query(query).toArray();

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