定向多重遍历

时间:2019-04-09 15:17:34

标签: node.js orientdb

我有这张图:

graph

我正在尝试使用OrientDB v3.0的“ SQL语法”编写一个查询,该查询从客户端开始并遵循读取路径(X表示:并且没有{{1} }与客户的关系)。

我可以获取细分,但找不到如何联系该联系人。 docs have many examples,但只能走一条路。

我尝试了以下查询,但均未成功

Have

您有什么信息可以完成遍历吗?

我正在使用Node.js API:

SELECT FROM  (TRAVERSE out("Access").out("Contain") FROM (SELECT @rid FROM Client where myId = 30543) MAXDEPTH 1)


SELECT FROM (
    TRAVERSE out("Contain") FROM
        (TRAVERSE out("Access") FROM (SELECT @rid FROM Client where myId = 30543) MAXDEPTH 1)
    MAXDEPTH 1
)

SELECT out('Access').out("Contain") FROM Client WHERE myId = 30543

2 个答案:

答案 0 :(得分:0)

请尝试使用以下代码:

"select out_{edgeclass}.in from (select expand(out_{edgeclass}.in) from {Vetex} where {condition})"

答案 1 :(得分:0)

match更适合此类任务。

使用SELECT

  

在第一个版本中,查询更具可读性,但是它不使用索引,因此在执行时间方面不是最佳选择。第二个和第三个使用索引(如果存在)(在子查询中都位于Person.name或City.name上),但它们更难阅读。他们使用哪个索引仅取决于您编写查询的方式。

但是匹配:

  

查询执行器为您优化查询,选择存在索引的地方。而且,查询变得更具可读性,尤其是在复杂的情况下,例如多个嵌套的SELECT查询。

正确的查询:

SELECT EXPAND(contatti) 
    FROM ( 
      match { class: Client, as: user, where : ( myId = 30543)}
        .out('Access')
        .out('Contain'){ class:Contact, as:contatti, where: (gender= 'M')},
      NOT {as:user} -Have-> {as:contatti} 
      RETURN DISTINCT contatti LIMIT 1000
    )
相关问题