'Match' 在 OrientDB 上 returns 一个不存在的路径

'Match' on OrientDB returns a path that doesn't exist

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

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

我实际得到的是2条路径:

  1. vertex1-edgeX-vertex2 (jonn Smith --phoneCallX-- dan smith) 还有:
  2. vertex1-edgeX-vertex1 - 这是不正确的,因为它与第一个结果是相同的 edge-@rid 而且它不是自边:jonn Smith --phoneCallX-- jonn Smith

查询:

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. 名字在 ['John']
  2. 列表项目 lastName IN ['Smith']

但仍然 - 我打算找到 "John-phoneCall-Smith" 的所有路径并且我在这个 John 和他自己之间得到了一个边缘(不存在)只是因为他的名字是 Smith(这应该是条件此关系的其他实体) )

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

您可以明确指定两个顶点必须不同。 语法是,在 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