在ArangoDB中,可以使用AQL(ArangoDB查询语言)来遍历图并进行基于边的数组过滤。以下是一个示例,展示如何使用AQL遍历图并过滤边。
假设我们有一个图,其中包含两个集合:vertices
(顶点)和edges
(边)。edges
集合中的每个文档都有一个type
字段,我们希望仅遍历类型为friend
的边。
首先,确保你已经创建了图和集合。例如:
db._createVertexCollection("vertices");
db._createEdgeCollection("edges");
db._createGraph("myGraph", {
edgeDefinitions: [
{
collection: "edges",
from: ["vertices"],
to: ["vertices"]
}
]
});
插入一些顶点和边数据:
db.vertices.save({ _key: "user1", name: "Alice" });
db.vertices.save({ _key: "user2", name: "Bob" });
db.vertices.save({ _key: "user3", name: "Charlie" });
db.edges.save({ _key: "edge1", _from: "vertices/user1", _to: "vertices/user2", type: "friend" });
db.edges.save({ _key: "edge2", _from: "vertices/user2", _to: "vertices/user3", type: "family" });
db.edges.save({ _key: "edge3", _from: "vertices/user1", _to: "vertices/user3", type: "friend" });
使用AQL遍历图并过滤类型为friend
的边:
FOR v, e, p IN 1..2 OUTBOUND 'vertices/user1' GRAPH 'myGraph'
FILTER e.type == 'friend'
RETURN { vertex: v, edge: e, path: p }
解释:
FOR v, e, p IN 1..2 OUTBOUND 'vertices/user1' GRAPH 'myGraph'
:从顶点user1
开始,遍历最多2步的出边。FILTER e.type == 'friend'
:过滤类型为friend
的边。RETURN { vertex: v, edge: e, path: p }
:返回当前顶点、边和路径。以下是完整的AQL查询:
FOR v, e, p IN 1..2 OUTBOUND 'vertices/user1' GRAPH 'myGraph'
FILTER e.type == 'friend'
RETURN { vertex: v, edge: e, path: p }
运行此查询将返回从user1
出发,类型为friend
的边及其路径。
通过这种方式,你可以根据边的属性进行过滤,并遍历图中的相关顶点和边。根据你的具体需求,可以调整查询中的过滤条件和遍历深度。
领取专属 10元无门槛券
手把手带您无忧上云