Graph 关于理解ArangoDB中图形创建的必要性

Graph 关于理解ArangoDB中图形创建的必要性,graph,arangodb,Graph,Arangodb,我不明白在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[*].n

我不明白在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
上面的两个查询显然与图相关……但是您不需要创建一个图来让它们工作

为什么以及何时创建图形

如果我创建一个图形,我会得到什么好处?

在ArangoDB中是可选的。其目的是在修改期间保持图形的持久性

您可以在集合上使用文档功能和图形遍历组合,而无需引用图形

但是,上面的图形定义的一个主要目的是在修改边或顶点时使用它。顶点集合中的顶点文档可以从多个边集合中的多个边文档引用,这些边集合在术语上属于多个图

现在,将查询所有这些图形定义是否允许边指向此非常特殊的顶点集合。随后,搜索并删除所有可能边集合中的所有边。所有这些都是通过事务安全性完成的

通过这样做,可以保持所提到的图形持久性。图形持久性意味着您没有指向先前移除的顶点的悬空边

请注意,你应该使用;人们可以重新措辞

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
在ArangoDB中是可选的。其目的是在修改期间保持图形的持久性

您可以在集合上使用文档功能和图形遍历组合,而无需引用图形

但是,上面的图形定义的一个主要目的是在修改边或顶点时使用它。顶点集合中的顶点文档可以从多个边集合中的多个边文档引用,这些边集合在术语上属于多个图

现在,将查询所有这些图形定义是否允许边指向此非常特殊的顶点集合。随后,搜索并删除所有可能边集合中的所有边。所有这些都是通过事务安全性完成的

通过这样做,可以保持所提到的图形持久性。图形持久性意味着您没有指向先前移除的顶点的悬空边

请注意,你应该使用;人们可以重新措辞

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

谢谢你@dothebart。。现在我明白了一个图形在arango中的意义。过去,我曾根据自己的一项要求进行过模式匹配遍历,但指定最小值和最大值并不总是对我有帮助。例如,我需要得到给定顶点的所有连接顶点(在任何深度)。为此,我不想指定最大深度(事实上我不知道)并将跳数限制在该深度(maxdepth)…相反,我想遍历整个图形并列出到给定顶点的所有连接顶点。如何使用模式匹配遍历来实现这一点?您目前只能通过指定一个非常大的max来实现。请注意,这种遍历可能会使用许多资源;由于这个原因,它不允许穿越任意深度。谢谢@dothebart。。现在我明白了一个图形在arango中的意义。过去,我曾根据自己的一项要求进行过模式匹配遍历,但指定最小值和最大值并不总是对我有帮助。例如,我需要得到给定顶点的所有连接顶点(在任何深度)。为此,我不想指定最大深度(事实上我不知道)并将跳数限制在该深度(maxdepth)…相反,我想遍历整个图形并列出到给定顶点的所有连接顶点。如何使用模式匹配遍历来实现这一点?您目前只能通过指定一个非常大的max来实现。请注意,这种遍历可能会使用许多资源;由于这个原因,它不允许穿越到任意深度。