我正在使用OrientDB'匹配'来根据条件获取路径(在图表上),但我得到的结果路径不存在。
我有一个“Person”顶点,它有一个“PhoneCall”边缘到另一个“Person”顶点 - 只有一条路径应该匹配! 所以我将exxt得到结果:vertex1-edgeX-vertex2 例如 - “jonn Smith --phoneCallX-- dan smith”
我实际得到的是2个:
查询:
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()”方法与第一个顶点适用于两个过滤器的事实:
但仍然 - 我的意思是找到所有“John-phoneCall-Smith”的路径,我得到了这个John和他之间的优势(因为他的名字是史密斯(这应该是条件)这种关系的其他实体))
请帮助我 - 我做错了什么?
答案 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