【问题标题】:orientdb stop traverse with some conditionorientdb 在某些条件下停止遍历
【发布时间】:2017-05-03 18:25:57
【问题描述】:

鉴于此图: 第三方可能拥有也可能不拥有参数。

参数由上下文代码表示(例如:CREATE VERTEX Parameter SET context='val1', code='val2', value='val3')。 第三方由类型表示(例如:CREATE VERTEX ThirdParty SET type=7

从顶点 #40:0 开始,我想检索附加到此节点的给定参数(例如,带有 context='val1' 和 code='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 可以有多个参数,具有不同的 contextcode,我找不到如何修改 while 查询部分以与给定参数(context='val1' 和 code='val2')进行比较。

【问题讨论】:

    标签: orientdb


    【解决方案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. 您不能使用“context”作为属性名称,因为它指的是查询上下文,您不会得到预期的结果

    2. 我在 2.2.19 上发现了一个错误,它破坏了这个查询,我刚刚修复它并将修复推送到 2.2.x 分支。该修复程序将与 2.2.20 一起发布。与此同时,几个小时后,您将在这里找到快照https://oss.sonatype.org/content/repositories/snapshots/com/orientechnologies/orientdb-community/2.2.20-SNAPSHOT/

    【讨论】:

    • 感谢路易吉的回答!您修复的错误与错误有关:java.lang.UnsupportedOperationException: Implement SuffixIdentifier!?因为当我通过从whilewhere 子句中删除部分out('owns').context contains "val1" AND 来执行查询时,我得到UnsupportedOperationException
    • 我刚刚使用快照做了一个测试,效果很好!我只需将where: (code="val2") 添加到{as: parameter} 子句中,以检索给定参数的值,否则查询将返回附加到节点的所有参数的值。感谢您的帮助!我昨天才开始在 orientdb 上工作,我已经是它的忠实粉丝了! :)
    • 太棒了!感谢您的澄清,我正在更新原始答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多