AQL 的基础知识在这里解释得很好:https://docs.arangodb.com/3.3/AQL/index.html
FOR item IN Items FILTER item.keyVal == "someValue" RETURN item
将是您的最小 SQL SELECT ... WHERE 语句。
BTW:这里有比较介绍:
https://arangodb.com/why-arangodb/sql-aql-comparison/
学习 AQL 的一个好方法是尝试一小段代码并返回结果以供检查,逐步创建更复杂的查询。
例如,让我们返回嵌套的 keyVal 值之一:
FOR doc IN Fruits
RETURN doc.Items.Apple.keyVal
// "6044e3a3-c064-4171-927c-2440e2f65660"
要通过 Apple keyVal 过滤并返回 SKey,您可以这样做:
FOR doc IN Fruits
FILTER doc.Items.Apple.keyVal == "6044e3a3-c064-4171-927c-2440e2f65660"
RETURN doc.SKey
// "123"
您也可以返回两个 keyVal 值:
FOR doc IN Fruits
RETURN [
doc.Items.Apple.keyVal,
doc.Items.Lemons.keyVal
]
// [
// "6044e3a3-c064-4171-927c-2440e2f65660",
// "79c45f4d-4f62-4c8e-8de1-79e04fc9b95d"
// ]
如果任一值等于某个值,要返回 SKey,试试这个:
FOR doc IN Fruits
FILTER "79c45f4d-4f62-4c8e-8de1-79e04fc9b95d" IN [
doc.Items.Apple.keyVal,
doc.Items.Lemons.keyVal
]
RETURN doc.SKey
注意:IN 在这里用作数组运算符,就像 {array} 中包含的 {value}。
要返回所有对属性路径进行硬编码的 keyVal 值,您可以使用ATTRIBUTES() AQL function:
FOR doc IN Fruits
FOR attr IN ATTRIBUTES(doc.Items)
RETURN doc.Items[attr].keyVal
要在任何嵌套的 keyVal 值匹配时返回 SKey,我们可以这样做:
FOR doc IN Fruits
LET keyVals = (FOR attr IN ATTRIBUTES(doc.Items)
RETURN doc.Items[attr].keyVal
)
FILTER "6044e3a3-c064-4171-927c-2440e2f65660" IN keyVals
RETURN doc.SKey
注意:这使用子查询来捕获中间结果。
要测试是否包含所有指定的值,您可以这样做:
LET ids = [
"79c45f4d-4f62-4c8e-8de1-79e04fc9b95d",
"6044e3a3-c064-4171-927c-2440e2f65660"
]
FOR doc IN Fruits
LET keyVals = (FOR attr IN ATTRIBUTES(doc.Items)
RETURN doc.Items[attr].keyVal
)
FILTER ids ALL IN keyVals
RETURN doc.SKey
ALL IN 是一个数组比较运算符。
请注意,如果您想使用索引而不硬编码属性路径以及不同的查询,则需要更改您的数据模型。