ArangoDB支持使用AQL语句来将关系作为属性填充到查询结果中。以下是一个示例AQL语句:
FOR vertex IN GRAPH_TRVERSAL(@graph, @startVertex, @cfg)
LET relatedNodes = (
FOR v, e, p IN 1..1 ANY vertex._id GRAPH @graph
RETURN { relatedNode: v._id, relation: e._id }
)
RETURN MERGE(vertex, { relations: relatedNodes })
在这个查询中,“relations”是要填充的字段名,其中“relatedNodes”是查询结果中的关联节点和关系的数组。您需要使用GRAPH_TRAVERSAL函数指定查询的图谱,然后在FOR语句中迭代顶点,并使用“ANY”操作符查找与顶点相邻的边和节点。使用LET语句将查询结果存储在“relatedNodes”数组中,最后返回一个合并了顶点和“relatedNodes”字段的AQL对象。
完整的JavaScript实现如下:
const aql = require('arangojs').aql;
const db = // ArangoDB connection;
const query = aql`
FOR vertex IN GRAPH_TRVERSAL(@graph, @startVertex, @cfg)
LET relatedNodes = (
FOR v, e, p IN 1..1 ANY vertex._id GRAPH @graph
RETURN { relatedNode: v._id, relation: e._id }
)
RETURN MERGE(vertex, { relations: relatedNodes })
`
const result = await db.query(query, {
graph: 'myGraph',
startVertex: 'vertices/1234',
cfg: { direction: 'outbound', strategy: 'bfs' }
});
console.log(result);
此代码将查询“myGraph”图中从“vertices/1234”开始的所有顶点,并将每个顶点的关系作为填充字段返回。该查询使用广度优先搜索策略以出站方向遍历边缘。注意,返回结果会将“relations”字段添加到每个顶点对象中。