【发布时间】:2019-02-05 02:46:43
【问题描述】:
我正在尝试使用 IF THEN 样式的 AQL,但我在 AQL 文档中可以找到的唯一相关运算符是三元运算符。我尝试将 IF THEN 语法添加到我已经工作的 AQL 中,但无论我尝试什么都会出现语法错误。
LET doc = DOCUMENT('xp/a-b')
LET now = DATE_NOW()
doc == null || now - doc.last >= 45e3 ?
LET mult = (doc == null || now - doc.last >= 6e5 ? 1 : doc.multiplier)
LET gained = FLOOR((RAND() * 3 + 3) * mult)
UPSERT {_key: 'a-b'}
INSERT {
amount: gained,
total: gained,
multiplier: 1.1,
last: now
}
UPDATE {
amount: doc.amount + gained,
total: doc.total + gained,
multiplier: (mult < 4 ? FLOOR((mult + 0.1) * 10) / 10 : 4),
last: now
}
IN xp
RETURN NEW
:
RETURN null
给出以下错误信息:
stacktrace: ArangoError: AQL: syntax error, unexpected identifier near 'doc == null || now - doc.last >=...' at position 1:51 (while parsing)
【问题讨论】:
-
如果语法错误指向特定位置,而您没有在问题中报告,您希望我们如何给出有针对性的回复?您能否编辑问题并将确切的错误消息以及它提供的任何周围上下文复制粘贴到其中?
-
没有周围的上下文,但我会编辑问题。
-
嗯,天哪,我完全错过了你的第一个三元组......这对我来说真的很糟糕,因为这显然是所有这一切的重点。如果这完全可行,您需要在第一个
?及其匹配的:之间用括号括起来,因为没有任何优先规则可以让您在没有帮助的情况下这样做。但是,我更倾向于认为这是他们希望您使用相关的 arangojs 语言来执行该逻辑的事情。 -
对我来说似乎很奇怪,一种类似于 SQL 的语言无法像使用 SQL 那样做 IF THEN。这对语言的可用性造成了相当大的打击。
标签: conditional-statements arangodb upsert aql arangojs