簡體   English   中英

ArangoDB AQL 片段問題

[英]ArangoDB AQL Fragments Issue

我正在構建一個復雜的搜索查詢,它允許用戶同時搜索多個值的數據庫。 該表單提交了所有看起來像(簡化)的字段(無論是否保存數據):

{
  "PartNumber": "000000",
  "Requestor": "",
  "Assigned" true
}

在上述情況下,我正在搜索PartNumber等於000000Assignedtrue的數據庫。 由於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM