OrientDB上的“匹配”返回不存在的路径

时间:2018-05-29 10:18:45

标签: orientdb

我正在使用OrientDB'匹配'来根据条件获取路径(在图表上),但我得到的结果路径不存在。

我有一个“Person”顶点,它有一个“PhoneCall”边缘到另一个“Person”顶点 - 只有一条路径应该匹配! 所以我将exxt得到结果:vertex1-edgeX-vertex2 例如 - “jonn Smith --phoneCallX-- dan smith”

我实际得到的是2个:

  1. vertex1-edgeX-vertex2(jonn Smith --phoneCallX-- dan smith)还要:
  2. vertex1-edgeX-vertex 1 - 它不是真的,因为它与第一个结果是相同的edge-@ rid并且它不是自我边缘:jonn Smith --phoneCallX--琼恩史密斯
  3. 查询:

    MATCH {class:person, as:E1, where:( (   firstName IN ['John']   ) )}.bothE(){class:phoneCall, as:R0}.bothV(){class:person, as:E0, where:( (   lastName IN ['Smith']   ) )} RETURN $paths
    

    我认为它正在发生,因为“both()”方法第一个顶点适用于两个过滤器的事实:

    1. firstName IN ['John']
    2. 列出项目lastName IN ['Smith']
    3. 但仍然 - 我的意思是找到所有“John-phoneCall-Smith”的路径,我得到了这个John和他之间的优势(因为他的名字是史密斯(这应该是条件)这种关系的其他实体))

      请帮助我 - 我做错了什么?

1 个答案:

答案 0 :(得分:2)

您可以明确指定两个顶点必须不同。 在E2的WHERE条件中,语法是$matched.E1 <> $currentMatch

MATCH 
   {class:person, as:E1, where:( (   firstName IN ['John']   ) )}
      .bothE(){class:phoneCall, as:R0}
      .bothV(){class:person, as:E0, where:(lastName IN ['Smith'] AND $matched.E1 <> $currentMatch)} 
RETURN $paths