[英]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.