[英]ArangoDB AQL Fragments Issue
我正在构建一个复杂的搜索查询,它允许用户同时搜索多个值的数据库。 该表单提交了所有看起来像(简化)的字段(无论是否保存数据):
{
"PartNumber": "000000",
"Requestor": "",
"Assigned" true
}
在上述情况下,我正在搜索PartNumber
等于000000
且Assigned
为true
的数据库。 由于Requestor
是空的,我想忽略它。
我发现您可以构建AQL 片段,但我似乎无法让它们工作。 我试过了:
const query = `
FOR part in ${parts}
${aql.literal(PartNumber ? `FILTER part.PartNumber == ${PartNumber}` : "")}
${aql.literal(Requestor ? `FILTER part.Requestor == ${Requestor}` : "")}
${aql.literal(Assigned ? `FILTER part.Assigned == ${Assigned}` : "")}
RETURN part
`
const results = db._query(query)
但没有运气,我收到一个奇怪的错误: ArangoError: AQL: syntax error, unexpected:, expecting ] near ': 105600]
我一直在为此撞墙,有什么我遗漏的吗?
提前致谢!
编辑 - 附加测试
使用这个简单的查询:
const query = `
FOR part in ${parts}
${aql.literal(PartNumber ? `FILTER part.PartNumber == "000000"` : "")}
RETURN part
`
我只在查询到达数据库之前返回查询,它显示: "\"\\nFOR part in [ArangoCollection: 105600]\\n[object Object]\\nRETURN part\\n\""
您可以看到aql.literal()
正在为我的条件返回[object Object]
。 将此作为字符串输出,它返回{}
。 变量PartNumber
已定义,因此条件为真。
编辑 - 找到解决方案
这是有条件地使用多个字段的正确方法吗?
let query = `
FOR part IN parts
${PartNumber ? `FILTER CONTAINS(part.PartNumber, "${PartNumber}")` : ""}
${Requestor ? `FILTER CONTAINS(part.Requestor, "${Requestor}")` : ""}
RETURN part
`
const results = db._query(query)
res.send(results)
aql.literal
返回query
模板标签可以理解的 object,但这意味着您实际上需要使用query
模板标签 - 即query`...`
而不是`...`
:
const query = query`
FOR part in ${parts}
${aql.literal(PartNumber ? `FILTER part.PartNumber == ${PartNumber}` : "")}
${aql.literal(Requestor ? `FILTER part.Requestor == ${Requestor}` : "")}
${aql.literal(Assigned ? `FILTER part.Assigned == ${Assigned}` : "")}
RETURN part
`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.