[英]How to merge aql query with iterative traversal
我想使用AQL在ArangoDB中查询集合,并在查询的每个节点上使用遍历扩展节点。
我试图通过使用集合查询中的LET语句将遍历作为子查询来调用来实现。 即使查询完成,遍历的结果集也为空。
FOR ne IN energy
FILTER ne.identifier == "12345"
LET ne_edges = (
FOR v, e IN 1..1 ANY ne relation
RETURN e
)
RETURN MERGE(ne, {"edges": ne_edges})
[
{
"value": 123.99,
"edges": []
}
]
我已经验证了存在边,并且在不作为子查询执行时遍历会正确返回。
从子查询返回结果之前,似乎初始查询已完成,给出了以下结果。
我想念什么? 或者,还有更好的方法?
我可以想到两种方法来做到这一点。 这第一个更容易理解,但是第二个更紧凑。 对于以下示例,我有一个顶点集合test2和一个边缘集合testEdge,它们链接了test2中的父项和子项
使用收集:
let seed = (FOR testItem IN test2
FILTER testItem._id in ['test2/Q1', 'test2/Q3']
RETURN testItem._id)
let traversal = (FOR seedItem in seed
FOR v, e IN 1..1 ANY seedItem
testEdge
RETURN {seed: seedItem, e_to: e._to})
for t in traversal
COLLECT seeds = t.seed INTO groups = t.e_to
return {myseed: seeds, mygroups: groups}
在上方,我们首先获取要遍历的项目(种子),然后执行遍历并获取具有种子.id和相关边的对象,然后最后使用collect into
将结果分组
使用数组扩展
FOR testItem IN test2
FILTER testItem._id in ['test2/Q1', 'test2/Q3']
LET testEdges = (
FOR v, e IN 1..1 ANY testItem testEdge
RETURN e
)
RETURN {myseed: testItem._id, mygroups: testEdges[*]._to}
这次,我们使用let
语句结合了种子搜索和遍历。 然后我们使用数组扩展将项目分组
无论哪种情况,我最终都会看到如下内容:
[
{
"myseed": "test2/Q1",
"mygroups": [
"test2/Q1-P5-2",
"test2/Q1-P6-3",
"test2/Q1-P4-1"
]
},
{
"myseed": "test2/Q3",
"mygroups": [
"test2/Q3",
"test2/Q3"
]
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.