我不了解在ArangoDB中创建图表的必要性。
例如,请参阅以下AQL,
// Paths between 2 vertices
FOR p IN TRAVERSAL(person, knows, "person/person3", "outbound", {
paths: true, filterVertices: [{_id: "person/person2"}],
vertexFilterMethod: ["exclude"]}) RETURN p.path.vertices[*].name
//All connected Vertices for a given Vertex..**
FOR p IN PATHS(person, knows, "outbound")
FILTER p.source._id == "person/person5"
RETURN p.vertices[*].name
以上两个查询显然与图表有关...但您无需创建图表即可使其工作。
为什么以及何时应该创建图表?
如果我创建图表,我会获得哪些优势?
答案 0 :(得分:0)
Creating or registering a 'graph'是可选的。其目的是在修改期间保持图形持久性。
您可以在集合中使用文档要素和图遍历的组合,而无需参考图表。
但是,上面图形定义的一个主要目的是在修改边或顶点时使用它。顶点集合中的顶点文档可以从多个边集合中的多个边缘文档中引用,这些边集合在术语中属于多个图形。
当你现在remove a vertex via a graph API时,查询所有这些图形定义是否允许边指向这个非常特殊的顶点集合。随后搜索并移除所有可能边集合中的所有边。所有这些都是通过事务安全来完成的。
通过这样做,可以保持所提到的图形持久性。图形持久性意味着您没有指向先前删除的顶点的悬空边缘。
Plesae请注意,您应该使用pattern matching traversals;人们可以改写
FOR p IN TRAVERSAL(person, knows, "person/person3", "outbound", {
paths: true, filterVertices: [{_id: "person/person2"}],
vertexFilterMethod: ["exclude"]}) RETURN p.path.vertices[*].name
像这样使用更现代的模式匹配:
FOR v, e, p IN 1..20 OUTBOUND "person/person3"
FILTER v._ID != "person/person2"
RETURN p.vertices[*].name