使用 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 过滤器变量将被动态替换。希望这有帮助。
我想在 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 过滤器变量将被动态替换。希望这有帮助。