通过节点属性进行ArangoDB有效遍历

根德尔

在OrientDB中,每个顶点都有连接的连接边。这意味着可以使用嵌套的“ select”语句显式遍历集合中的节点。

例如:给定节点属性的路径,找到匹配的结束节点。路径由节点属性列表组成(例如,kind在路径中的节点中是唯一的)。

现在,假设我有一棵树:

kind=site, name=site1
  -- kind=project, name=project1
  -- kind=library, name=library1
kind=site, name=site2
  -- kind=project, name=project2
  -- kind=library, name=library1

用户希望从名为library1的库中获取以下路径的信息:

[{kind=site},{kind=project,name=project1},{kind=library,name=library1}]

只要结果是单个节点,就不必让每个节点都完全具有遍历的资格。

在OrientDB中,过程将是:

  • 从kind = site的所有节点开始
  • 遍历“子”边缘并收集所有种类为kind = project和name = project1的对象
  • 遍历子边缘并收集所有种类为kind = library和name = library1的对象

这可以在嵌套的select语句中完成。对kind字段进行了索引,因此可以从大量对象中快速收集起始节点。为了进一步提高性能,我知道哪种表(集合)属于哪种类型,因此我可以确定要从中选择的对象的数量(从<table>选择,其中kind = site)。

在ArrangoDB中,只有边缘具有节点绑定信息,因此拥有节点我无法直接穿过连接的边缘。在GRAPH_TRAVERSAL函数中,我可以通过示例指定起始集合。因此,示例为{kind = site}。这不是意味着必须通过扫描所有图形边缘来收集节点的起始列表,基本上是查看连接到整个图形中每个边缘输入的每个节点吗?

这样的查询将如何制定(在AQL和/或arangojs中),这样就不必从对边缘连接的对象进行全面扫描开始了?

我也看不到如何将示例顶点发送到arangojs遍历函数中。似乎总是想要一个明确的起始顶点。

哥德巴特

考虑到这样的工作,我们设计了新的AQL图形遍历,该遍历将与ArangoDB 2.8一起发布(当前处于beta后期)

关于您的最后一点,我们使用命名图识别相关集合,这些知道集合及其在图中的关系。我假设您将named graphs因此使用

让我们使用带有arangosh的ArangoDB 2.8示例图之一:

var examples = require("org/arangodb/graph-examples/example-graph.js");
var graph = examples.loadGraph("traversalGraph");

它在circles集合中有其顶点,其边缘连接edges集合中的顶点

db.circles.toArray();
db.edges.toArray();

现在,我们可以将FILTER语句与遍历深度结合使用,以在执行的早期修剪图分支的遍历。

在这里,我们对在遍历的第一层中找到的顶点的属性进行过滤:

db._query("FOR v, e, p IN 1..3 " + 
              "OUTBOUND 'circles/A' " + 
              "GRAPH 'traversalGraph' " + 
              "FILTER p.vertices[1]._key != 'G' RETURN v._key");

我们还可以通过类似的方式过滤边缘的属性:

db._query("FOR v, e, p IN 1..3 "
          "OUTBOUND 'circles/A' " +
          "GRAPH 'traversalGraph' " + 
          "FILTER p.edges[0].label != 'right_foo' RETURN v._key");

AQL图的遍历章也有一个深入的解释,以何种方式横移走在曲线图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

遍历节点列表的有效方法?

来自分类Dev

如何通过作为数组的子属性有效地对对象数组进行分组?

来自分类Dev

是否有比通过节点进行单独的多个API调用更简单的方法来从Chainlink获取分散数据?

来自分类Dev

通过有效的P值对变量进行分组

来自分类Linux

在Linux中通过源代码进行有效导航

来自分类Dev

通过wifi进行通讯的最有效方法

来自分类Python

对numpy数组进行哈希处理的最有效属性

来自分类Python

对numpy数组进行哈希处理的最有效属性

来自分类Dev

如何在postgresql中有效地遍历节点?

来自分类Dev

在树中搜索具有特定属性的节点并分配树的属性的有效方法

来自分类Dev

如何通过节点js将子节点添加到现有json文件中?

来自分类Dev

遍历列的有效方法

来自分类Dev

有效的图遍历算法

来自分类Dev

Redux的reducer遍历如何有效?

来自分类Dev

在Julia中有效遍历结构

来自分类Dev

遍历 BigInteger 的有效方法

来自分类Dev

如何通过遍历字典有效地替换数据帧中的值?

来自分类Dev

通过跳过缺失值来有效地遍历字典列表值Python 3

来自分类Dev

首先通过节点后端传递所有http请求和React Routes以进行会话验证,然后返回路径

来自分类Dev

通过节点进行MongoDB查询返回可见结果,但Postgres不这样做吗?

来自分类Dev

通过节点标签和属性类型提取neo4j图过滤的子集

来自分类Dev

R / Network Analysis-如何通过节点的属性创建边

来自分类Dev

如何在节点红色中使用XML有效负载进行POST

来自分类Dev

如何通过在Matlab中追溯父节点来有效地创建数组?

来自分类Dev

通过节点获取FTP上传进度

来自分类Dev

如何通过节点运行testcafe

来自分类Dev

通过节点项目中的 sequelize 搜索所有潜在的 SQL 注入

来自分类Dev

有什么办法可以通过节点js获取文件夹统计信息

来自分类Dev

Neo4j / CYPHER:如何有效地从节点查询某些属性,其关系和目标节点?

Related 相关文章

  1. 1

    遍历节点列表的有效方法?

  2. 2

    如何通过作为数组的子属性有效地对对象数组进行分组?

  3. 3

    是否有比通过节点进行单独的多个API调用更简单的方法来从Chainlink获取分散数据?

  4. 4

    通过有效的P值对变量进行分组

  5. 5

    在Linux中通过源代码进行有效导航

  6. 6

    通过wifi进行通讯的最有效方法

  7. 7

    对numpy数组进行哈希处理的最有效属性

  8. 8

    对numpy数组进行哈希处理的最有效属性

  9. 9

    如何在postgresql中有效地遍历节点?

  10. 10

    在树中搜索具有特定属性的节点并分配树的属性的有效方法

  11. 11

    如何通过节点js将子节点添加到现有json文件中?

  12. 12

    遍历列的有效方法

  13. 13

    有效的图遍历算法

  14. 14

    Redux的reducer遍历如何有效?

  15. 15

    在Julia中有效遍历结构

  16. 16

    遍历 BigInteger 的有效方法

  17. 17

    如何通过遍历字典有效地替换数据帧中的值?

  18. 18

    通过跳过缺失值来有效地遍历字典列表值Python 3

  19. 19

    首先通过节点后端传递所有http请求和React Routes以进行会话验证,然后返回路径

  20. 20

    通过节点进行MongoDB查询返回可见结果,但Postgres不这样做吗?

  21. 21

    通过节点标签和属性类型提取neo4j图过滤的子集

  22. 22

    R / Network Analysis-如何通过节点的属性创建边

  23. 23

    如何在节点红色中使用XML有效负载进行POST

  24. 24

    如何通过在Matlab中追溯父节点来有效地创建数组?

  25. 25

    通过节点获取FTP上传进度

  26. 26

    如何通过节点运行testcafe

  27. 27

    通过节点项目中的 sequelize 搜索所有潜在的 SQL 注入

  28. 28

    有什么办法可以通过节点js获取文件夹统计信息

  29. 29

    Neo4j / CYPHER:如何有效地从节点查询某些属性,其关系和目标节点?

热门标签

归档