2017-05-03 47 views
0

鉴于此图表: enter image description here 第三方可能或不拥有参数。orientdb停止遍历一些条件

参数是通过一个上下文代码(:CREATE VERTEX Parameter SET context='val1', code='val2', value='val3' EX)表示。 ThirdParty由类型表示(例如:CREATE VERTEX ThirdParty SET type=7

从顶点#40:0开始,我想检索给定参数的值val2')连接到此节点(节点可以有不同的参数)。如果节点不拥有给定的参数,那么我想逐个遍历该节点的父节点,直到找到给定参数的值。

我尝试使用此查询:

SELECT parameter.value FROM (MATCH {class:ThirdParty, 
      where: (type = 7)}.in('parent_of') 
      {while: (out('owns').size() == 0), 
      where: (out('owns').size() > 0)}.out('owns') 
      {as: parameter} RETURN parameter) 

但问题是,一个ThirdPary可以有多个参数,用不同的背景代码,我无法找到如何修改部分在查询中与给定参数(context ='val1'和code ='val2')进行比较。

回答

1

查询应该是这样:

SELECT parameter.value FROM (
    MATCH 
     {class:ThirdParty, where: (type = 7)} 
     .in('parent_of') 
     { 
     while: (
      not (
      out('owns').context contains "val1" 
      AND 
      out('owns').code contains "val2" 
      ) 
     ), 
     where: (
      out('owns').context contains "val1" 
      AND 
      out('owns').code contains "val2" 
     ) 
     }.out('owns') 
     {as: parameter, where:(code = "val2" and context = "val1")} 
    RETURN parameter 
) 

  1. 你不能使用“上下文”为属性的名称,因为它是指查询上下文,你会不会有你期待的结果

  2. 我在2.2.19上发现了一个破坏这个查询的bug,我只是修复了它,并且把修复推到了2.2.x分支上。该修补程序将以2.2.20发布。与此同时,在几个小时内你会发现这里的快照https://oss.sonatype.org/content/repositories/snapshots/com/orientechnologies/orientdb-community/2.2.20-SNAPSHOT/

+0

感谢Luigi的回答!你修正的错误与错误有关:'java.lang.UnsupportedOperationException:Implement SuffixIdentifier!'?因为当我通过删除部分out('owns')来执行查询时,上下文包含来自'while'和'where'子句的“val1”AND',我得到'UnsupportedOperationException' – mabbas

+0

正是我所做的修复解决了这个问题 –

+0

我刚做了一个使用快照的测试,它工作得很好!我只需要将'where:(code =“val2”)''添加到'{as:parameter}'子句中,以检索给定参数的值,否则查询返回连接到节点的所有参数的值。感谢您的帮助!我昨天才开始研究orientdb,而且我已经是一个很棒的粉丝! :) – mabbas