尝试在AQL中使用UPSERT并成功进行我需要将值推入列表数组(我还需要检查它是否存在,尽管我认为我已经存在)
代码
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中
答案 0 :(得分:0)
此处使用的语言是Javascript。 简化此处的查询:
let foo="bar";
db._query(aql`RETURN ${foo}`).toArray()
实际上是使用a specialized AQL-Template string来生成绑定值。要拆除实际交给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混合使用,这不受支持。