【发布时间】:2018-08-04 17:47:09
【问题描述】:
我在 arangodb 中有这个测试图
节点:
[ { "_key": "A", "name": "A", "sector": "a"},
{ "_key": "B", "name": "B", "sector": "a"},
{ "_key": "C1", "name": "C1", "sector": "c"},
{ "_key": "C2", "name": "C2", "sector": "c"},
{ "_key": "C3", "name": "C3", "sector": "c"},
{ "_key": "C4", "name": "C4", "sector": "c"},
{ "_key": "D1", "name": "D1", "sector": "d"},
{ "_key": "D2", "name": "D2", "sector": "d"},
{ "_key": "E1", "name": "E1", "sector": "e"},
{ "_key": "E2", "name": "E2", "sector": "e"},
{ "_key": "E3", "name": "E3", "sector": "e"}]
边:
[{ "_from": "V/A","_to": "V/D1", "cat": [{"c":1,"s":3}] },
{ "_from": "V/A","_to": "V/D2", "cat": [{"c":1,"s":1}] },
{ "_from": "V/B","_to": "V/D2", "cat": [{"c":2,"s":1}] },
{ "_from": "V/D1","_to": "V/E1", "cat": [{"c":1,"s":8}] },
{ "_from": "V/D1","_to": "V/E2", "cat": [{"c":1,"s":4}] },
{ "_from": "V/D2","_to": "V/E2", "cat": [{"c":1,"s":3},{"c":2,"s":4}] },
{ "_from": "V/D2","_to": "V/E3", "cat": [{"c":2,"s":4}] },
{ "_from": "V/C1","_to": "V/B", "cat": [{"c":2,"s":5}] },
{ "_from": "V/C1","_to": "V/A", "cat": [{"c":1,"s":6}] },
{ "_from": "V/C2","_to": "V/A", "cat": [{"c":1,"s":2}] },
{ "_from": "V/C3","_to": "V/A", "cat": [{"c":1,"s":1}] },
{ "_from": "V/C4","_to": "V/A", "cat": [{"c":1,"s":1}] },
{ "_from": "V/C4","_to": "V/B", "cat": [{"c":2,"s":2}] } ]
它是更大图的简化部分(几乎一千个节点,几千条边)。请注意,在此示例中,每条边都有一个属性“cat”作为类别对象的数组。实际上,在真实的数据集中,每条边都是一个或多个网络的一部分。有 22 个网络/类别。在这个工作示例中,只有两个,1 和 2。每条边都是一个类别的一部分,除了 D2->E3 是这里唯一的一个作为两个类别的成员。
问题:我必须从给定顶点开始,通过过滤/选择所选类别(真实数据中的网络)及其相关顶点的边来遍历图形。当然,避免循环和重复的顶点或边。
示例:从 B 开始,选择类别 2,我需要返回这个集合: v: [B,D2,E2,E3,C1,C4] 和 e: [{B->D2, D2->E2, D2->E3, C1->B, C4->B]
在 AQL 中,我尝试了各种过滤器:
FOR v, e, p IN 0..3 any "nodes/D2" edges OPTIONS {bfs: true, uniqueVertices: 'global'}
//Here, the filter for cat 2 ?
return p
没有任何效果(当然,我是 Arango 的新手)。
问题一:如何构造过滤器?
问题 2:如何像上例那样格式化结果?更准确地说(每个数组中对象的顺序无关紧要):
[
nodes: [{name:"B",sector:"a"}, {name:"D2",sector:"d"}, {name:"E2",sector:"e"}, ...]
edges: [{source: "B", target: "D2", s:1}, {source: "D2", target: "E2", s:4}, ...]
]
感谢您的帮助。
【问题讨论】: