簡體   English   中英

ArangoDB AQL Upsert如何將值推入列表

[英]ArangoDB AQL Upsert how to push a value into list

嘗試在AQL中使用UPSERT並成功插入,我需要將一個值推入列表數組(並且我還需要ot檢查它是否存在,盡管我認為我有)

const t_list_ = db._query(aql`
        UPSERT { token_name: ${token_i}, type: ${type}}
        INSERT { token_name: ${token_i},
                 type: ${type},
                 frequency: ${tokens[i].frequency},
                 user_list: [${req.pathParams.user_id}] }
        UPDATE { frequency: OLD.frequency + ${tokens[i].frequency},
                 user_list: OLD.user_list.push(${req.pathParams.user_id})}
             IN token_category
        RETURN { doc: NEW, type: OLD ? 'update' : 'insert' }`).toArray()

錯誤是:ArangoError:語法錯誤,意外(期望在“(@ value3)}附近輸入} token_category

此處使用的語言是Javascript。 簡化此處使用的查詢:

let foo="bar";
db._query(aql`RETURN ${foo}`).toArray()

實際上是使用專用的AQL-Template字符串來生成綁定值。 要拆除實際交給db._query()我們可以使用JSON.stringify()

print(JSON.stringify(aql`RETURN ${foo}`))
{"query":"RETURN @value0","bindVars":{"value0":"bar"}}

在這里,您會看到錯誤消息中該字符串的實際來源: @value3實際上是您已插入模板中的一個表達式的綁定變量。

因此,有關語法錯誤的實際問題是:

        UPDATE { frequency: OLD.frequency + ${tokens[i].frequency},
                 user_list: OLD.user_list.push(${req.pathParams.user_id})}

在這里,您將AQL語法與Javascript-Syntax混合使用,這不受支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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