'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条路径:
- vertex1-edgeX-vertex2 (jonn Smith --phoneCallX-- dan smith) 还有:
- 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()" 方法 和 第一个顶点适用于两个过滤器的事实:
- 名字在 ['John']
- 列表项目 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
我正在使用 OrientDB 'match' 根据条件获取路径(在图表上),但我得到的结果路径不存在。
我有一个 "Person" 顶点,它有一个 "PhoneCall" 边到另一个 "Person" 顶点 - 只有一条路径应该匹配! 所以我 expext 得到结果:vertex1-edgeX-vertex2 例如 - "jonn Smith --phoneCallX-- dan smith"
我实际得到的是2条路径:
- vertex1-edgeX-vertex2 (jonn Smith --phoneCallX-- dan smith) 还有:
- 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()" 方法 和 第一个顶点适用于两个过滤器的事实:
- 名字在 ['John']
- 列表项目 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